温馨提示×

反汇编指令有哪些

小樊
43
2026-07-09 19:18:55
栏目: 编程语言

反汇编(Disassembly)是将机器码(二进制)转换为汇编指令的过程。不同架构(CPU)和不同工具支持的反汇编指令/命令各不相同。下面按常见架构常用工具来系统说明。


一、常见架构的反汇编指令(汇编助记符)

1. x86 / x86-64(最常见)

指令类型 示例 说明
数据传输 MOV, PUSH, POP, LEA 寄存器/内存数据移动
算术运算 ADD, SUB, MUL, DIV, INC, DEC 加减乘除
逻辑运算 AND, OR, XOR, NOT, SHL, SHR 位运算
控制流 JMP, JE, JNE, CALL, RET 跳转、函数调用
比较 CMP, TEST 影响标志位
字符串/特殊 NOP, INT, SYSCALL 空操作、中断

示例:

mov eax, ebx
push ebp
call printf
ret

2. ARM(含 ARM64)

指令 说明
MOV, LDR, STR 数据加载/存储
ADD, SUB 算术
B, BL, BX 跳转、函数调用
CMP, BEQ, BNE 比较与条件跳转
LDP, STP ARM64 双寄存器操作

示例:

mov x0, #1
bl printf
ret

3. MIPS

指令 说明
lw, sw 加载/存储
add, sub 算术
beq, bne 条件跳转
j, jal, jr 跳转

4. RISC-V

指令 说明
lw, sw 加载/存储
add, sub 运算
beq, bne 跳转
ecall 系统调用

二、常用反汇编工具及命令

1. objdump(Linux / GNU 工具链)

objdump -d test.bin
objdump -d -M intel test.elf   # x86 Intel 语法
objdump -d -b binary -m arm test.bin

常用选项:

  • -d:反汇编可执行段
  • -M intel:Intel 语法(默认 AT&T)
  • -b binary:裸二进制文件
  • -m:指定架构(arm、i386、x86-64)

2. GDB(调试器)

disassemble main
disassemble 0x401000
disassemble /r main   # 显示机器码

3. IDA Pro(商业逆向工具)

  • 自动反汇编
  • 支持 x86 / ARM / MIPS / RISC-V
  • 快捷键:
    • Space:切换图形/文本
    • Tab:汇编 ↔ 伪代码(Hex-Rays)

4. Radare2 / Cutter

r2 test.bin
> aaa
> pdf @ main

5. ndisasm(NASM 工具,适合裸机)

ndisasm -b 32 test.bin
ndisasm -b 64 test.bin

6. Ghidra(NSA 开源)

  • 自动反汇编 + 反编译
  • 支持多种架构
  • 适合逆向工程

三、反汇编 vs 反编译

项目 反汇编 反编译
输出 汇编指令 高级语言(C 伪代码)
可读性 较低 较高
工具 objdump, IDA, Ghidra Hex-Rays, Ghidra

四、总结一句话

反汇编指令本身取决于 CPU 架构(x86 / ARM / MIPS 等),而“反汇编命令”取决于你使用的工具(objdump、gdb、IDA、Ghidra 等)。

如果你愿意,可以告诉我:

  • ✅ 目标架构(x86 / ARM / 嵌入式?)
  • ✅ 使用场景(逆向、漏洞分析、内核、固件?)
  • ✅ 操作系统(Linux / Windows / 裸机?)

我可以给你更精确的反汇编命令与示例

0