objdump 是 GNU binutils 中的经典工具,常用于查看目标文件/可执行文件的汇编代码、符号表、段信息等。下面从基本用法 → 常用选项 → 示例 → 实战技巧逐步说明。
objdump [选项] 文件
常见文件类型:
a.out、test.o.a.soobjdump -d test
-d:disassemble 可执行代码段示例输出:
0000000000401136 <main>:
401136: 55 push %rbp
401137: 48 89 e5 mov %rsp,%rbp
objdump -d -S test
-S:source interleaved(需要编译时加 -g)编译示例:
gcc -g -O0 test.c -o test
输出:
main():
int a = 1;
401136: c7 45 fc 01 00 00 00 movl $0x1,-0x4(%rbp)
objdump -d test | grep -A 20 "<main>:"
或更精确:
objdump -d --start-address=0x401136 --stop-address=0x401160 test
objdump -t test
或只看外部符号:
objdump -T test
objdump -h test
输出:
.text 代码段.data 已初始化数据.bss 未初始化数据objdump -x test
包含:
objdump -d -m arm test.elf
常见:
armmipsi386powerpcgcc -g -O0 test.c -o test
objdump -d -S test | less
objdump -d test | grep -A 10 "401136"
gcc -O0 -g a.c -o a_O0
gcc -O2 -g a.c -o a_O2
objdump -d -S a_O0
objdump -d -S a_O2
✅ 必须编译为 ELF(Linux)
❌ Windows .exe 不能直接用(用 dumpbin 或 objdump + MinGW)
✅ 想看源码必须 -g
❌ -O2 下汇编可能“看不懂”
| 工具 | 用途 |
|---|---|
| objdump | 静态分析、整体反汇编 |
| gdb | 动态调试、单步执行 |
如果你愿意,我可以:
直接把代码或反汇编贴出来即可。