你问的应该是 在 CentOS 上常用的反汇编(disassembly)指令/工具为什么那样用、有哪些、以及为什么需要反汇编。下面我按“是什么 → 常用指令 → 为什么”来说明。
反汇编是把 机器码(二进制) 转成 汇编指令 的过程。
在 CentOS(Linux)中,反汇编通常用于:
objdump(最常用)objdump -d test
反汇编 test 可执行文件的所有代码段。
常见用法:
objdump -d -M intel test
-d:反汇编-M intel:使用 Intel 语法(默认是 AT&T)objdump -d -S test
-S:源码 + 汇编混合(需要 -g 编译)gdb(调试时反汇编)gdb ./test
进入后:
disassemble main
或:
disassemble /m main
/m:显示源码对应汇编查看当前执行位置:
x/10i $pc
readelf(辅助分析)readelf -h test
readelf -S test
用来确认:
nm / addr2line(配合反汇编)nm test
addr2line -e test 0x4005b6
用于:
例如:
int f(int x){
return x*3;
}
优化后可能是:
lea eax, [rdi+rdi*2]
不反汇编根本看不懂。
Segmentation fault (core dumped)
用:
gdb ./a.out core
然后:
bt
disassemble
定位崩在哪条指令。
历史原因:
但你可以强制用 Intel:
objdump -d -M intel
或 GDB:
set disassembly-flavor intel
CentOS 上反汇编,是为了“看见机器真正在干什么”。
常用的是objdump和gdb,因为它们是 GNU 工具链自带、稳定、适合服务器环境。
如果你是想问 某条具体反汇编指令为什么是这样(比如 mov, lea, call),可以把指令贴出来,我可以逐条解释。