GCC выполняет вуду, выравнивая стек моего main
, сохраняя расположение аргументов в ecx
0x08049060 8d4c2404 lea ecx, [arg_4h] ; 4 ; [13] -r-x section size 465 named .text
0x08049064 83e4f0 and esp, 0xfffffff0
0x08049067 ff71fc push dword [ecx - 4]
0x0804906a 55 push ebp
0x0804906b 89e5 mov ebp, esp
0x0804906d 51 push ecx
А потом,
0x080490a4 8b4dfc mov ecx, dword [local_4h]
0x080490a7 83c410 add esp, 0x10
0x080490aa c9 leave
0x080490ab 8d61fc lea esp, [ecx - 4]
0x080490ae c3 ret
Мне кажется, я понимаю , почему GCC делает то, что делает (, вы можете прочитать об этом здесь ), но в двоичном файле, который я пытаюсь восстановить из исходного кода, отсутствуют эти инструкции в учебнике, и я хочу создать сборку как можно ближе к учебнику.
Оба они возвращаются с file
,
stack0: исполняемый ELF 32-разрядный LSB, Intel 80386, версия 1 (SYSV), динамически связанный, интерпретатор /lib/ld-linux.so.2, для GNU / Linux 2.6.18,
Я пробовал __attribute__ ((packed))
на основном и #pragma pack
, ни один из которых не работал.