网站开发强制使用急速内核网站网页策略
- 公开视频 -> 链接点击跳转公开课程
 - 博客首页 -> 链接点击跳转博客主页
 
目录
一、汇编指令格式基础
二、操作数类型详解
1. 立即数(Immediate)
2. 寄存器操作数(Register)
3. 内存操作数(Memory)
4. 端口操作数(Port)
三、汇编指令格式分类
1. 零操作数指令
2. 单操作数指令
3. 双操作数指令
4. 三操作数指令
四、逆向工程中的指令解析技巧
五、拓展知识点
一、汇编指令格式基础
汇编指令由操作码(Opcode)和操作数(Operand)组成,是计算机执行的最底层命令。
格式为:
操作码 [目标操作数], [源操作数]
MOV EAX, EBX ; 将EBX的值复制到EAX ADD DWORD [ESI], 0x10 ; 将ESI指向的内存地址的值加0x10
二、操作数类型详解
操作数决定了指令操作的数据来源和去向,主要分为以下四类:
1. 立即数(Immediate)
-  
定义:直接编码在指令中的常数(数值或地址)。
 -  
特点:不可修改,常用于赋值或运算。
 -  
示例:
MOV EAX, 1234h ; EAX = 0x1234 ADD ECX, 0x55AA ; ECX += 0x55AA
 
2. 寄存器操作数(Register)
-  
定义:使用CPU寄存器(如EAX、EBX等)作为数据源或目标。
 -  
特点:速度最快,无内存访问开销。
 -  
示例:
XOR EDX, EDX ; EDX = 0(清零) SHL EAX, CL ; EAX左移CL次(CL为寄存器操作数)
 
3. 内存操作数(Memory)
-  
定义:通过内存地址访问数据,需指定地址计算方式。
 -  
语法:
-  
直接寻址:
[地址]MOV EAX, [0x401000] ; 将0x401000地址处的值读入EAX
 -  
寄存器间接寻址:
[基址寄存器 + 偏移量]MOV EBX, [ESI + 8] ; EBX = ESI指向地址+8处的值
 -  
比例因子寻址(x86特有):
[基址 + 索引寄存器 * 比例因子 + 偏移]MOV ECX, [EAX + EDX*4 + 0x10] ; 常用于数组操作
 
 -  
 
4. 端口操作数(Port)
-  
定义:通过I/O端口与硬件交互(如键盘、磁盘控制器)。
 -  
指令:
IN和OUT。 -  
示例:
IN AL, 0x60 ; 从键盘端口0x60读取一个字节到AL OUT 0x20, AL ; 将AL的值写入中断控制器端口0x20
 
三、汇编指令格式分类
根据操作数数量和类型,指令格式可分为以下类别:
1. 零操作数指令
-  
特点:仅操作码,无显式操作数(隐含操作数)。
 -  
示例:
NOP ; 空操作(占用1字节) RET ; 函数返回(操作数隐含为栈顶地址)
 
2. 单操作数指令
-  
特点:仅有一个操作数(目标或源)。
 -  
示例:
INC EAX ; EAX += 1 NOT DWORD [EBX] ; 对EBX指向的DWORD取反
 
3. 双操作数指令
-  
特点:最常见格式,支持寄存器、内存、立即数组合。
 -  
规则:
-  
目标操作数不能是立即数。
 -  
源和目标不能同时为内存操作数(x86限制)。
 
 -  
 -  
示例:
MOV EAX, [EDI] ; 合法:内存到寄存器 ADD DWORD [EBP-4], 5 ; 合法:内存 + 立即数 CMP ESI, EDX ; 合法:寄存器比较
 
4. 三操作数指令
-  
特点:现代SIMD指令(如AVX)或特殊指令支持。
 -  
示例:
IMUL EAX, ECX, 16
 
四、逆向工程中的指令解析技巧
-  
识别操作数类型
-  
立即数:直接数值(如
0x401000)。 -  
寄存器:EAX、EBX等寄存器名称。
 -  
内存地址:方括号
[]包裹的表达式。 
 -  
 -  
内存寻址模式分析
-  
静态地址:
MOV EAX, [0x404000](可能访问全局变量)。 -  
动态计算:
MOV ECX, [EBX + ESI*4 + 8](典型数组或结构体访问)。 
 -  
 -  
指令副作用分析
-  
隐式操作数:如
MUL ECX会修改EDX:EAX 。 -  
标志寄存器影响:
CMP指令会设置ZF、CF等标志位。 
 -  
 
五、拓展知识点
-  
指令编码格式(Opcode Encoding)
-  
Opcode:1~3字节,决定操作类型(如
MOV的Opcode为0x8B)。 -  
ModR/M字节:指定操作数类型(寄存器/内存)和寻址模式。
 -  
SIB字节(Scale-Index-Base):扩展复杂内存寻址(如比例因子)。
 -  
示例:
机器码:8B 45 FC 反汇编:MOV EAX, [EBP-4]
 
 -  
 -  
CISC与RISC架构差异
-  
CISC(x86):指令长度可变,支持复杂内存操作(如
MOV [EAX+EBX*4], EDX)。 -  
RISC(ARM):指令长度固定(32位),内存操作需专用加载/存储指令(如
LDR R0, [R1])。 
 -  
 -  
高级指令集(SIMD与特权指令)
-  
SIMD指令(SSE/AVX):
PADDB XMM0, XMM1 ; 对XMM0和XMM1按字节相加
 -  
特权指令:
CLI ; 关闭中断(Ring 0权限) MOV CR0, EAX ; 修改控制寄存器(内核模式)
 
 -  
 -  
调试与反汇编工具技巧
-  
动态调试(x64dbg):
-  
单步执行观察指令对寄存器和内存的影响。
 -  
使用“内存映射”窗口查看内存操作数指向的实际数据。
 
 -  
 -  
静态分析(IDA Pro):
-  
按
F5生成伪代码时,注意内存寻址的变量名推断。 -  
使用“交叉引用(Xref)”追踪内存或寄存器的使用路径。
 
 -  
 
 -  
 -  
高级语言与汇编的对应关系
-  
C/C++代码:
int arr[10]; arr[3] = arr[2] + 1;
 -  
对应汇编:
MOV EAX, [arr + 8] ; arr[2] INC EAX MOV [arr + 12], EAX ; arr[3]
 
 -  
 
