在 CentOS(x86_64) 下查看“汇编”,常见有几种不同场景,下面按最常用 → 进阶给你系统说明。
objdump(最基础、最常用)objdump -d ./a.out
常用选项:
objdump -M intel -d ./a.out # Intel 语法(默认是 AT&T)
objdump -d -S ./a.out # 汇编 + 源码(需 -g 编译)
示例:
gcc -g test.c -o test
objdump -M intel -S test
gdb(动态调试 + 看汇编)gdb ./a.out
常用 GDB 汇编命令:
disassemble main
disassemble 0x4005f0
info registers
stepi
nexti
切换 Intel 语法:
set disassembly-flavor intel
查看当前执行位置汇编:
disassemble
cat /usr/include/asm/unistd_64.h
或:
ausyscall --dump
strace(看系统调用,不是汇编)strace ./a.out
perf(性能分析 + 汇编)perf record ./a.out
perf annotate
可以看到热点代码的汇编 + 源码映射。
objdump -d /boot/vmlinux-$(uname -r)
或模块:
objdump -d /lib/modules/$(uname -r)/kernel/fs/ext4/ext4.ko
radare2(进阶)yum install radare2
r2 ./a.out
常用:
aaa
pdf @ main
gcc -S test.c
生成:
test.s
查看:
cat test.s
使用 Intel 语法:
gcc -S -masm=intel test.c
| 需求 | 推荐命令 |
|---|---|
| 查看程序汇编 | objdump -d |
| 调试时看汇编 | gdb + disassemble |
| C → 汇编 | gcc -S |
| Intel 语法 | -M intel |
| 汇编 + 源码 | objdump -S |
| 内核汇编 | objdump -d vmlinux |
yum install -y binutils gdb gcc perf
如果你能说明 具体场景(例如:
✅ 看 C 程序汇编
✅ 逆向 ELF
✅ 内核调试
✅ 漏洞分析
✅ 看 syscall 实现)
我可以给你更精确的命令和示例。