nopsled

עמוד

התגובות שלי בפורום

מוצגות 7 תגובות – 1 עד 7 (מתוך 7 סה״כ)
  • מאת
    תגובות
  • בתגובה ל: עזרה בלהבין קוד אסמבלי שקומפיילרים יוצרים #77967
    nopsled
    משתתף

    וואו אתה ממש מבין
    חסרה לי קצת תיאוריה אז לא הצלחתי להבין איך הגעת להכפלה ב 13 ולמה זה מתאים למבנה נתונים בגודל כזה, איך הגעת לאיזה מבנה נתונים מדובר ומה הגודל שלו

    nopsled
    משתתף

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

    nopsled
    משתתף

    ויש לי את ה
    push ebp
    mov ebp, esp
    ב MAIN כי ה MAIN הוא פונקציה לכל דבר אז גם הוא צריך יצירה של STACK
    ואת הפקודוהת האלו גם
    נכון?

    nopsled
    משתתף

    סליחה התכוונתי ש RETN הוא גם C3
    ולא C2

    nopsled
    משתתף

    והנה תראה פה ש 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

מוצגות 7 תגובות – 1 עד 7 (מתוך 7 סה״כ)