Я обнаружил, что исполняемый файл из кода
int main(int argc, char** argv) {
printf("Hello World\n");
return 0;
}
может быть разобран на (скомпилирован с использованием gcc -m32)
Этот код принадлежит другому человеку
; Variables:
; arg_4: 12
; arg_0: 8
; var_4: -4
; var_8: -8
; var_C: -12
; var_10: -16
; var_18: -24
push ebp
mov ebp, esp
sub esp, 0x18
call _main+11
pop eax ; CODE XREF=_main+6
mov ecx, dword [ebp+arg_4]
mov edx, dword [ebp+arg_0]
lea eax, dword [eax-0x1f5b+0x1fa6] ; "Hello World!\\n"
mov dword [ebp+var_4], 0x0
mov dword [ebp+var_8], edx
mov dword [ebp+var_C], ecx
mov dword [esp+0x18+var_18], eax ; method imp___symbol_stub__printf
call imp___symbol_stub__printf
xor ecx, ecx
mov dword [ebp+var_10], eax
mov eax, ecx
add esp, 0x18
pop ebp
ret
, но когда я дизассемблирую исполняемый файл из того же кода (скомпилирован с использованием gcc -m32)
Я получил очень длинную разборкукод (вот ссылка)
Мои вопросы
Почему инструкции из одного и того же кода отличаются?Или они одинаковые?
Есть ли какой-нибудь вариант компилятора или компилятора, который я могу использовать, который дает мне код разборки, аналогичный тому, который есть у другого человека?
Рекомендуете ли вы какие-либо ссылки, которые я могу прочитать, чтобы понять термины из длинного кода сборки?(например, __x86.get_pc_thunk.dx)
С уважением, Тайсон