在 Linux 环境下,“反汇编指令格式”通常可以从 两个层面 来理解:
下面分别说明。
objdump -d <文件>
常见用法:
objdump -d a.out
objdump -d -M intel a.out
objdump -d -M intel -S a.out # 反汇编 + 源码
常用选项:
-d:反汇编可执行代码段-D:反汇编所有段-M intel:使用 Intel 语法(默认是 AT&T)-S:混合显示源码和反汇编-x:显示头信息-t:符号表(gdb) disassemble
(gdb) disassemble main
(gdb) disassemble /m main # 带源码
设置语法:
set disassembly-flavor intel
ndisasm(适用于裸二进制)ndisasm -b 32 file.bin
readelf -S:查看段,不直接反汇编特点:
%$示例:
movl $0x1, %eax
addl %ecx, %eax
call *%eax
特点:
%、无 $示例:
mov eax, 1
add eax, ecx
call eax
切换方式:
objdump -d -M intel a.out
或 gdb:
set disassembly-flavor intel
0000000000401136 <main>:
401136: 55 push %rbp
401137: 48 89 e5 mov %rsp,%rbp
40113a: b8 00 00 00 00 mov $0x0,%eax
40113f: 5d pop %rbp
401140: c3 ret
格式说明:
地址: 机器码 助记符 操作数
Linux 下默认使用 AT&T 语法反汇编,常用
objdump -d,可通过-M intel切换为 Intel 语法。
如果你是想问 某一条具体指令的反汇编格式(比如 call、jmp、mov),可以告诉我具体场景。