温馨提示×

linux反汇编指令格式为何

小樊
40
2026-10-12 06:26:24
栏目: 智能运维

在 Linux 环境下,“反汇编指令格式”通常可以从 两个层面 来理解:

  1. 反汇编工具使用的命令格式(如 objdump、gdb)
  2. 反汇编后看到的汇编指令格式(AT&T vs Intel)

下面分别说明。


一、Linux 常用反汇编命令格式

1. objdump(最常用)

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:符号表

2. gdb 中反汇编

(gdb) disassemble
(gdb) disassemble main
(gdb) disassemble /m main   # 带源码

设置语法:

set disassembly-flavor intel

3. 其他工具

  • ndisasm(适用于裸二进制)
ndisasm -b 32 file.bin
  • readelf -S:查看段,不直接反汇编

二、反汇编后的指令格式(重点)

1. AT&T 语法(Linux 默认)

特点:

  • 源操作数在前,目的操作数在后
  • 寄存器加 %
  • 立即数加 $
  • 指令带操作数大小后缀(b/w/l/q)

示例:

movl $0x1, %eax
addl %ecx, %eax
call *%eax

2. Intel 语法(Windows 风格,可切换)

特点:

  • 目的操作数在前,源操作数在后
  • 无 %、无 $
  • 更直观

示例:

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),可以告诉我具体场景。

0 踩