אם אתה מתחיל, אל תתחיל מפירוק ++C.
תתחיל מפירוק של C.
בנוסף, אל תתחיל מקבצי ELF שלמים, תתחיל מפירוק קובץ o שקומפלה עליו פונקציה בודדת.
קובץ ELF שנבנה מ-++C, גם עם קוד טריוויאלי יחסית כמו זה שהצגת, יכלול המון overhead כשהוא בצורת assembly.
בנוסף, עליך לוודא שהקובץ לא קומפל עם אופטימיזציה, אלא במצב debug או 0 O-, אחרת ההתאמה בין קוד assembly שתקבל, לקוד C שכתבת, תהיה נמוכה יחסית (תתפלא כמה טריקים הקומפיילר יודע!).
רק בשביל לסבר את האוזן:
הקומפיילר יודע "לשטח לולאות" - להעלים לולאות ופשוט לחזור על הקוד שבתוכן, להעיף חלקים בקוד שהוא חושב שהם חסרי תועלת, ולהחליף סדר פעולות אם הדבר לא משנה את התוצאה.
לכן, אם אתה רוצה ללמוד איך הופכים קוד בשפה עילית לקוד assembly, תתחיל בקטנה מפונקציות בודדות, בשפת C וללא אופטימיזציה.
אגב, אם תרצה, אתה יכול אפילו להימנע מ-decompile, ולבקש מ-gcc לעשות את התרגום ל-assembly בלבד, ע"י שימוש בפרמטר S-
כך תקבל ישירות קוד assembly מקוד C (או ++C אם אתה מתעקש).
בהצלחה!
--לב
|