我想学习逆向工程,所以我开始尝试编译简单的(开始)C 程序,然后阅读反汇编。
以下文件
int main(void) {
return 0;
}
编译gcc
然后反汇编objdump -d
最终创建了 172 行输出。我不明白为什么有这么多输出。
不同部分的含义是什么:
0000000000400370 <_init>:
0000000000400390 <__libc_start_main@plt-0x10>:
00000000004003a0 <__libc_start_main@plt>:
00000000004003b0 <__gmon_start__@plt>:
00000000004003c0 <_start>:
00000000004003f0 <deregister_tm_clones>:
0000000000400420 <register_tm_clones>:
0000000000400460 <__do_global_dtors_aux>:
0000000000400480 <frame_dummy>:
00000000004004ad <main>:
00000000004004c0 <__libc_csu_init>:
0000000000400530 <__libc_csu_fini>:
0000000000400534 <_fini>:
当然,我一直在阅读有关调用约定和操作码的信息,因此我可以了解该部分与 C 代码的对应关系。