我可以使用哪些编译器选项来进行反汇编?
What are some compiler options that I can use to get this disassembly?
我从代码中找到了可执行文件
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 编译)
我得到了一个很长的反汇编代码(here is the link)
我的问题是
为什么相同代码的指令不同?或者,它们是一样的吗?
是否有任何我可以使用的编译器或编译器选项给我提供与其他人一样的反汇编代码?
您是否推荐任何我可以阅读以理解长汇编代码中的术语的参考资料? (比如__x86.get_pc_thunk.dx)
此致,
泰森
- 您正在查看两个不同版本的反汇编。一种是 AT&T 语法,另一种是 Intel。此外,link 包含所有程序集,而您此处的代码段仅包含主要功能。
- 编译器选项将更改输出并导致进行更多优化。大部分反汇编器都有语法切换的功能(我觉得intel比较常见)。
- 这是由 GCC 生成的东西,因此您的代码可以使用 link 内置到 linux/bsd 中的动态库。 thunk 提供了一种解析 function 地址的方法。
我从代码中找到了可执行文件
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 编译)
我得到了一个很长的反汇编代码(here is the link)
我的问题是
为什么相同代码的指令不同?或者,它们是一样的吗?
是否有任何我可以使用的编译器或编译器选项给我提供与其他人一样的反汇编代码?
您是否推荐任何我可以阅读以理解长汇编代码中的术语的参考资料? (比如__x86.get_pc_thunk.dx)
此致, 泰森
- 您正在查看两个不同版本的反汇编。一种是 AT&T 语法,另一种是 Intel。此外,link 包含所有程序集,而您此处的代码段仅包含主要功能。
- 编译器选项将更改输出并导致进行更多优化。大部分反汇编器都有语法切换的功能(我觉得intel比较常见)。
- 这是由 GCC 生成的东西,因此您的代码可以使用 link 内置到 linux/bsd 中的动态库。 thunk 提供了一种解析 function 地址的方法。