לימוד אסמבלי
-
אני מחפש מדריכים ללימוד אסמבלי
לבנתיים התחלתי מהמדריך הזה.האם מישהו יכול להמליץ על עוד מדריכים טובים?
יותר בכיוון של רשימת הפקודות מה כל דבר עושה? ולמה?
(ז"א אין לי כוח עכשיו לחפור עוד בכל מה שקשור למספרים/מתמטיקה/בינארי/הקסדצימלי וכדו'
אלא להבין את הסינטקסט וסוגי הפקודות, ורק אחר כך לחזור שוב על כל הבסיס)
למשל בקוד הזה:section .text ;section declaration ;we must export the entry point to the ELF linker or global _start ;loader. They conventionally recognize _start as their ;entry point. Use ld -e foo to override the default. _start: ;write our string to stdout mov edx,len ;third argument: message length mov ecx,msg ;second argument: pointer to message to write mov ebx,1 ;first argument: file handle (stdout) mov eax,4 ;system call number (sys_write) int 0x80 ;call kernel ;and exit mov ebx,0 ;first syscall argument: exit code mov eax,1 ;system call number (sys_exit) int 0x80 ;call kernel section .data ;section declaration msg db "Hello, world!",0xa ;our dear string len equ $ - msg ;length of our dear string
אני מבין שיוצרים את המשתנה msg עם סטרינג
ואז מוסיפים את המשתנה len עם אורך המחרוזת.
ואז מעתיקים את msg לאוגר מסויים (למה דווקא אליו?)
ואת האורך לאוגר אחר (למה?).
ואז רושמים באוגר נוסף את היעד לכתיבה
ובאוגר נוסף את המספר פקודה למערכת הפעלה( sys_write?)
ואז מפעילים עםint 0x80
(שנקרא גםsyscall
)
כנ"ל כשרוצים לעשות exit
מכניסים לאוגרים הנ"ל את הקוד 0 ו 1
ואז הsyscall
מבצע יציאה.בקיצור אפשר לומר שאני מחפש מילון פשוט לכל הפקודות מה כל דבר עושה
יש לכם המלצה? -
@nigun אתה מבקש כאן 2 דברים:
א. להבין מה כל פקודה עושה.
ב. להבין למה דווקא בחרו באוגר הזה, בשביל זה צריך להבין קצת יותר את הארכיטקטורה של המעבד..ממליץ לך על הספר של המרכז לחינוך סייבר.
אתה לא חייב לקרוא אותו בצורה מסודרת, אבל מאמין שתמצא שם את התשובה ל2 סוגי השאלות. -
@nigun אמר בלימוד אסמבלי:
ואז מוסיפים את המשתנה len עם אורך המחרוזת.
ואז מעתיקים את msg לאוגר מסויים (למה דווקא אליו?)
ואת האורך לאוגר אחר (למה?).
ואז רושמים באוגר נוסף את היעד לכתיבה
ובאוגר נוסף את המספר פקודה למערכת הפעלה( sys_write?)הקוד שהבאת מיועד עבור מערכת לינוקס.
בלינוקס יש פרוטוקול איך מעבירים את הארגומנטים לקרנל
https://en.wikibooks.org/wiki/X86_Assembly/Interfacing_with_Linux#Via_interrupt
הארגומנטים שלwrite
נמצאים פה:man 2 write
או פה