Im Prolog der main
-Funktion (eines einfachen Spielzeugprogramms), die mit gcc -g -o program -m32 program.c
auf einer 64-Bit-Maschine kompiliert wurde (läuft ubuntu 14.04) bekomme ich die folgende Zerlegung:Was ist der Zweck der Stapelzeigerausrichtung im Prolog von main()
dump of assembler code for function main:
0x08048e24 <+0>: push %ebp
0x08048e25 <+1>: mov %esp,%ebp
0x08048e27 <+3>: and $0xfffffff0,%esp
...
Was ist der Zweck der Anweisung in < 3>? Das heißt, warum sollte der $esp
auf eine 16-ausgerichtete Adresse zeigen?
Es hält immer noch, wenn ich mit -m32 Flag kompilieren? – Bush
@Bush Ich denke, sie verwenden 16-Byte mit "-m32" auch wegen SSE. – ouah
Nun, nicht jeder x86-64 ABI tut das, deshalb bin ich immer etwas irritiert, wenn Leute vorgeben, dass es nur einen einzigen x86-64 ABI gibt. In diesem Fall ist im Kontext von Ubuntu klar, welche ABI gemeint ist, aber das ist nicht immer der Fall. –