MasterDK פורסם 2009 בספטמבר 16 Share פורסם 2009 בספטמבר 16 היי יש לי שאלה.להלן קוד קטן שקימפלתי:int main() { return 0; }וזה האסמבלי שלו שהתקבל אחרי קימפול:08048374: 55 push %ebp8048375: 89 e5 mov %esp,%ebp8048377: b8 00 00 00 00 mov $0×0,%eax804837c: 5d pop %ebp804837d: c3 ret804837e: 90 nop804837f: 90 nopהנא עוד קודvoid main() {}ושוב האסמבלי:8048374: 55 push %ebp8048375: 89 e5 mov %esp,%ebp8048377: 5d pop %ebp8048378: c3 ret8048379: 90 nop804837a: 90 nop804837b: 90 nop804837c: 90 nop804837d: 90 nop804837e: 90 nop804837f: 90 nopכמות ה NOPים בקוד השני מפצה על חוסר הפקודה mov eax, 0x0 (שהיא לוקחת 5 ביתים) ולכן בקודה שני יש 5 NOPים יותר.השאלה למה בכלל צריך אותם?מה זה נותן?תודה רבה מראש! קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2009 בספטמבר 16 Share פורסם 2009 בספטמבר 16 http://en.wikipedia.org/wiki/NOPA NOP is most commonly used for timing purposes, to force memory alignmenthttp://en.wikipedia.org/wiki/Data_structure_alignment קישור לתוכן שתף באתרים אחרים More sharing options...
MasterDK פורסם 2009 בספטמבר 16 מחבר Share פורסם 2009 בספטמבר 16 חשבתי שזה הסיבה אבל לא הצלחתי להבין למה מהקוד הנ"ל. אבל שכחתי שיש גם עוד הרבה קוד פרט ל MAIN צעמו.תודה! קישור לתוכן שתף באתרים אחרים More sharing options...
Zelig פורסם 2009 בספטמבר 16 Share פורסם 2009 בספטמבר 16 עוד סיבות ל-NOP:* במעבדים עם branch delay slots, בדרך כלל תמצא NOP-ים, במיוחד בחזרה מפונקציות.* על מנת להשאיר מקום ל-patch עתידי (נדיר).* self modifying code. קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.