在 CentOS(以及大多数 Linux 发行版)上,常用的**反汇编(disassembly)**工具和指令主要有以下几类,按使用场景给你梳理一下:
objdump(最常用)一般系统自带(来自 binutils)
objdump -d 可执行文件
常用选项:
objdump -d test # 反汇编代码段
objdump -D test # 反汇编所有段
objdump -S test # 源码+汇编(需编译时加 -g)
objdump -d -M intel test # Intel 语法(默认是 AT&T)
示例:
gcc -g -o test test.c
objdump -S -M intel test
gdb(调试时反汇编)适合运行时分析
gdb ./test
进入 gdb 后:
disassemble main
disassemble 0x400500
disassemble /m main # 混合源码
设置 Intel 语法:
set disassembly-flavor intel
ndisasm(针对裸二进制)适合 shellcode、 boot 等
ndisasm -b 32 file.bin
ndisasm -b 64 file.bin
安装:
yum install nasm
readelf(查看结构,不直接反汇编)配合 objdump 使用
readelf -h test
readelf -S test
objdump -d test | grep -A 20 "<main>:"
或:
gdb -q ./test
(gdb) disassemble main
yum install binutils gdb nasm
mov %rsp, %rbp
mov rbp, rsp
比如查 call、syscall 含义:
man 2 syscall
或参考:
如果你能说清楚:
我可以给你更精准的命令示例。