התגובות שלי בפורום
-
מאתתגובות
-
nopsledמשתתף
וואו אתה ממש מבין
חסרה לי קצת תיאוריה אז לא הצלחתי להבין איך הגעת להכפלה ב 13 ולמה זה מתאים למבנה נתונים בגודל כזה, איך הגעת לאיזה מבנה נתונים מדובר ומה הגודל שלוnopsledמשתתףאתה מסביר ממש ברור
מה שהכי טוב הוא שאתה מביא מקומות ממש מדויקים לתשובות
נראה לי שעכשיו אני אצטרך לקרוא את מה שהבאת לי כי זה כמה מאות עמודים ואולי הרבה דברים יהיו ברורים אחרי זהnopsledמשתתףויש לי את ה
push ebp
mov ebp, esp
ב MAIN כי ה MAIN הוא פונקציה לכל דבר אז גם הוא צריך יצירה של STACK
ואת הפקודוהת האלו גם
נכון?nopsledמשתתףסליחה התכוונתי ש RETN הוא גם C3
ולא C2nopsledמשתתףוהנה תראה פה ש RET הוא C3
באסמבלי 8086
http://cs.lmu.edu/~ray/notes/x86encode/RET C3 [8086]
RET imm16 C2 iw [8086]
RETF CB [8086]
RETF imm16 CA iw [8086]
RETN C3 [8086]
RETN imm16 C2 iw [8086]מה בכלל ההבדל בין RET וה RET N
זה לא אותה פקודה כי זה אופקודים שוניםnopsledמשתתףכלומר אני בעצם מגדירה משתנים בתחילת התוכנית.
באמת יש לי פה ארבעה משתנים שאני מגדירה
ואז תמיד צריכה לדחוף אתם למחסנית?
זה הכרחי?
ומצטערת אני עדיין לא מבינה מה זה שמירה רגילה של ערכי האוגרים
כי יש לי משתנים או אוגרים, אני שמה בהם ערך ואז דוחפת אותם בתור פרמטרים לפונקציה ועושה CAL (את החלק האחרון הסברת ממש טוב והבנתי נהדר באמת תודה לך).
אז אם יש לי ערכים והם מגיעים לפונקציה אז למה צריך לעשות להם PUSH אם בכל מקרה יהיה PUSH למה שבאמת הפונקציה שאליה אני מגיעה צריכהלמשל אני שולחת פה שני פרמטרים לפונקציה אז הייתי יכולה בעצם אם כבר להכניס רק שני משתנים למחסנית
אני קוראת אחכ לפונקציה שלוקחת ארבעה פרמטרים
אז בגלל שאני ב MAIN אני מכניסה על ההתחלה את כל המשתנים שאני מגדירה כדי שהיו זמינים לכל הפונקציות?עוד שאלה – איך הם יכולים להגיע למשתנים האלו? הרי לכל פונקציה יש מחסנית משלה נכון? איך הם מדלגים מהפונקציות אחכ לארבעה משתנים שהכנסתי על ההתחלה בתוכנית הראשית?
ואם יש שמירה "רגילה" יש גם שמירה "לא רגילה" אז מה זה שמירה לא רגילה?
ואין ב PDF את האוגרים האלו מה שאמרת עם ה INC
אז אני מניחה שאם יש לי כמה ריבועים אז בהתאם לכמות הריבועים אני לוקחת את האוגרים בסדר שאתה כתבת, נכון?ויופי RET זה 0xC3 אני חושבת שחיפשתי כבר כמה ימים איך אני מוצאת מה הערך שלו כי מצאתי שגיאה בספר באינטרנט שכתבו שם שגם LEAVE וגם RET הם 0xC9
אולי צריך לקחת את ה PDF שלך ולהככניס בו גם את ה OPCODEים ואז הוא יהיה הכי טוב מכולם.מצטערת אם יצא לי לחפור יותר מידי אבל נראה לי שזה חשוב כי זאת תוכנית ראשונה וזה הבסיס לכל תוכנית אחרת
י
nopsledמשתתףעכשיו הבנתי את זה וגם את היצירה של ה FRAME
שתי הפקודות הראשונות שלא הבנתי
זה באמת מסתדר כי הפונקציה מקבלת שתי פרמטרים שאלו באמת המשתנים עם הערכים שלהם
יש לי בהתחלת ה MAIN
הגדרה של הארבעה משתנים
אפשר גם הסבר למה יש לי את הפקודות האלו:
push ecx
push ebx
push esi
push ediמה היה קורה אם הייתי מגדירה 100 משתנים אין לי מספיק אוגרים
השאלה היא האם צריך לעשות PUSH למשתנים שיש לי ב MAIN
אפילו אם אין להם עדיין ערך
האם זה תמיד יהיה בהתחלה של תוכנית
או איפה יש קישור כמו שהבאת שהסביר טוב גם על הארבע פקודות האלו.ושאלה אחרת אם אפשר
איך אני יכולה לקבל מה האופקוד של פקודה שיש לי
למשל LEAVE זה אופקוד של
0xC9
איך אני יכולה לעשות המרה עם אתר או משהו נוח לאופקוד שמתאים לפקודה?יש את ה PDF הזה שהביאו לי
http://net.cs.uni-bonn.de/fileadmin/user_upload/plohmann/x86_opcode_structure_and_instruction_overview.pdf
הפקודה של RET
תופסת שתי מקומות גם של 2 וגם של 3
אז נראה לי שהגיוני שזה יהיה 2 אבל אני רוצה להיות בטוחהואיך מוצאים ב PDF הזה את האופקוד של INC?
זה מתחיל ב 4
אבל יש לו את הספרה השניה מ 0 עד 7 -
מאתתגובות