Zan / Blackwing:
Einige einfache Dinge mit / ohne framepointer-Optimierung zu kompilieren und diff -u
auf der disassemblierten Ausgabe zu verwenden, gibt einige Hinweise:
Sie sehen mehrere Arten von Änderungen:
push %ebp
und mov %esp, %ebp
. %ebp
-Register für nichts verwendet wird) push %ebp
, aber nicht co_de% eins, da der Framezeiger nicht initialisiert werden muss. mov %esp, %ebp
. mov 0x8(%ebp), %ecx
. mov 0x408(%esp), %ecx
für den Code, der framepointer verwendet, und lea -0x404(%ebp), %ebx
(könnte mov %esp, %ebx
sein) für den Code ohne FramePointer. lea 0x0(%esp), %ebx
-Register für eine lokale Variable zu verwenden (das gezeigte Beispiel zeigt das nicht) Compiler-Optimierungsebenen haben einen gewissen Einfluss darauf, wie der generierte Code tatsächlich aussieht, aber diese spezifischen Elemente ( %ebp
und die Verwendung von mov %esp, %ebp
- relative Adressierung für Argumente / lokale Variablen) sind nur wurde jemals in Code gefunden, der framepointers verwendet, und fehlt, wenn Sie mit %ebp
kompiliert haben.