在 CentOS(或其他 Linux 发行版)里,“反汇编指令何时用”这个问题,通常可以从使用场景和常用工具/命令两个角度来看。下面用通俗的方式说明。
反汇编(disassembly)是把机器码(二进制)转换成汇编指令的过程。
比如一个 .o 文件、可执行文件、core 文件,人看不懂机器码,但可以用反汇编看 CPU 实际执行的指令。
在 CentOS 上常用的是:
objdump(binutils 提供)gdb(调试时反汇编)readelf(辅助分析)perf(性能分析时看汇编)示例:
objdump -d test
gdb ./test
(gdb) disassemble main
当程序 core dump,但:
此时常用:
gdb ./app core
(gdb) bt
(gdb) disassemble
目的:看崩溃时执行到哪条汇编指令。
当你用 perf 发现某个函数 CPU 占用极高:
perf record ./app
perf report
点进函数后常会看汇编,用来判断:
你写了 C 代码,但不确定编译器是否:
可用:
gcc -O2 -c test.c
objdump -d test.o
此时反汇编是主要手段。
例如:
.so 文件只能通过反汇编理解行为。
比如:
以下情况一般不用:
在 CentOS 上,当你需要“看 CPU 实际在干什么”,而不是“代码逻辑是什么”时,就用反汇编。
如果你愿意,我也可以:
objdump 实战例子gdb + core 的完整分析流程