שאלה בvc++ 6

the origin

New member
שאלה בvc++ 6

איך אני יכול להפעיל קובץ exe שיושב שבזכרון. אני מקצה לו זכרון ומעלה את התוכן שלו לכתובת מסוימת, איך אני מריץ אותו משם?
 

vinney

Well-known member
לא ככה

אתה מפעיל קובץ EXE בעזרת קריאות מערכת exec (יש כמה המשתנות בפרמטרים המועברים אליהם) או system. אני חושב שיש גם קריאת מערכת של חלונות, אבל system נותנת מענה לרוב הצרכים.
 

the origin

New member
כן ככה :p

אני יודע להפעיל קובץ exe סתם אני פשוט עושה תוכנה שמחברת שני קבצי exe אני טוען את שניהם לזכרון ואז אני צריך להריץ אותם. זה יהיה בזבוז לכתוב אותם לכונן ואז להריץ אותם.
 

vinney

Well-known member
מחברת שני קבצי EXE?

איך בדיוק? מערכת הפעלה לא נותנת להפעיל EXE מהזכרון, ואתה לא יכול להפעיל EXE לבד כי זה לא קובץ קוד נטו, כמו למשל COMים ז"ל. אני לא חושב שיש לך ברירה אחרת. ומה זאת אומרת "תוכנה שמחברת שני קבצי EXE"???
 

the origin

New member
אז זה לא אפשרי?

המ... אז יש לך איזהשהי עצה איך אני יכול לעשות את זה בלי לכתוב את הכל לכונן? ואם אני לא טועה , כשהמערכת הפעלה מריצה exe היא מעלה אותו לזכרון גם ככה, אז למה אין אפשרות שאני יעלה אותו לזכרון ואז היא תריץ? ולמה?זה נשמר בסוד :)
 

selalerer

New member
כנראה כי לא חשבו על אפשרות כזאת

במיקרוסופט, ומצאו פתרונות אחרים לסיבה שבגללה אתה עושה את זה. אבל אולי יש איזה אפשרות לגרום לכתובת בזיכרון להיראות כמו קובץ (כמו שיש built in את הקובץ stdio שהוא בעצם זיכרון) ע"י יצירת מבנה FILE באיזשהי צורה.
 

vinney

Well-known member
זה לא ברור לי הקטע הזה

מה זאת אומרת "קובץ stdio שהוא בעצם זכרון"????
 

selalerer

New member
התכוונתי stdout או stdin...

אתה ניגש אליהם כמו קבצים לכל דבר אבל בעצם אתה כותב לזכרון של תהליך tty. אין לי שמץ של מושג איך לעשות את זה (שמצביע מסוג קובץ, FILE* יצביע לזכרון) אבל אם עשו את זה עם שלושת הקבצים הללו (stdin, stdout, stderr) אז כנראה שאפשר לעשות את זה.
 

gilad_no

New member
מסובך מאוד

אתה בעצם מנסה ליצור סוג של LOADER לEXE קיים שיבצע איתחול כלשהוא ולאחר מכן יריץ את הקובץ המקורי. מכיוון שHINSTANCE מצביע בעצם למיפוי של הקובץ בזיכרון, מה שבעצם צריך להבין זה כיצד לגרום למערכת ההפעלה ליצור מרחב חדש לקובץ. לדעתי תצטרך לשחק עם VIRTUALALLOC ודומיה. אך יש דרכים הרבה יותר פשוטות להשיג מה שאתה רוצה כגון יצירת HOOKS למיניהן שגם עובדות בצורה סטנדרטית ובטוחה לחלוטין. תפרט יותר מה אתה צריך לעשות ותקבל את הפיתרון האידיאלי.
 
למעלה