在 Linux 下“反汇编函数”通常有以下几种常见场景和工具,下面按从易到难、从常用到专业给你总结。
objdump(最常用)objdump -d ./a.out
objdump -d ./a.out | grep -A 30 '<func_name>:'
或者更精确:
objdump -d --demangle ./a.out | awk '/<func_name>:/{flag=1} flag{print} /^$/{flag=0}'
-g 编译)objdump -S ./a.out
gdb(调试时反汇编)gdb ./a.out
disassemble func_name
disassemble /m func_name
disassemble
nm + objdump(不知道函数地址时)nm ./a.out | grep func_name
objdump -d --start-address=0x401234 --stop-address=0x401300 ./a.out
readelf(查看符号和段)readelf -s ./a.out | grep func_name
objdump 反汇编内核 / 模块objdump -d vmlinux
objdump -d module.ko
llvm-objdump(LLVM 工具链)llvm-objdump -d ./a.out
int add(int a, int b) {
return a + b;
}
gcc -g -O0 -o test test.c
objdump -S test | grep -A 10 '<add>:'
| 工具 | 常用选项 | 说明 |
|---|---|---|
| objdump | -d |
反汇编 |
| objdump | -S |
源码+汇编 |
| objdump | --demangle |
C++ 名字还原 |
| gdb | disassemble |
调试中反汇编 |
| nm | -C |
C++ 符号 |
如果你愿意,可以告诉我:
我可以直接给你最合适的一条命令。