反汇编(Disassembly)是将机器码(二进制)转换为汇编指令的过程。不同架构(CPU)和不同工具支持的反汇编指令/命令各不相同。下面按常见架构和常用工具来系统说明。
| 指令类型 | 示例 | 说明 |
|---|---|---|
| 数据传输 | 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
| 指令 | 说明 |
|---|---|
MOV, LDR, STR |
数据加载/存储 |
ADD, SUB |
算术 |
B, BL, BX |
跳转、函数调用 |
CMP, BEQ, BNE |
比较与条件跳转 |
LDP, STP |
ARM64 双寄存器操作 |
示例:
mov x0, #1
bl printf
ret
| 指令 | 说明 |
|---|---|
lw, sw |
加载/存储 |
add, sub |
算术 |
beq, bne |
条件跳转 |
j, jal, jr |
跳转 |
| 指令 | 说明 |
|---|---|
lw, sw |
加载/存储 |
add, sub |
运算 |
beq, bne |
跳转 |
ecall |
系统调用 |
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)disassemble main
disassemble 0x401000
disassemble /r main # 显示机器码
Space:切换图形/文本Tab:汇编 ↔ 伪代码(Hex-Rays)r2 test.bin
> aaa
> pdf @ main
ndisasm -b 32 test.bin
ndisasm -b 64 test.bin
| 项目 | 反汇编 | 反编译 |
|---|---|---|
| 输出 | 汇编指令 | 高级语言(C 伪代码) |
| 可读性 | 较低 | 较高 |
| 工具 | objdump, IDA, Ghidra | Hex-Rays, Ghidra |
反汇编指令本身取决于 CPU 架构(x86 / ARM / MIPS 等),而“反汇编命令”取决于你使用的工具(objdump、gdb、IDA、Ghidra 等)。
如果你愿意,可以告诉我:
我可以给你更精确的反汇编命令与示例。