012、内存—内存读写与寻址
🎨 颜色标记说明
粉色:特别重要、主线必掌握、优先复盘的内容。
蓝色:核心概念、术语、分类名。
橙色:需要关注的边界、易错点、注意事项。
绿色:解释类内容、帮助理解知识点。
返回:网络安全知识库 · 上一节:内存管理与端序 · 下一节:C 语言与汇编程序框架
MOV 与内存读写MOV 是最常见的数据传送指令,基本形式为:
1mov 目标操作数, 源操作数
1234mov eax, 12345678h ; 立即数写入寄存器mov ebx, eax ; 寄存器写入寄存器mov eax, dword ptr [addr] ; 从内存读取 4 Bytemov dword ptr [addr], eax ; 向内存写入 4 Byte
方括号 [] 表示访问该地址指向的内存。没有方括号时,操作的是地址值或普通操作数本身。
操作宽度当汇编器无法从寄存器推断内存操作数宽度时,需要显式指定:
写法
宽度
byte ptr [eax]
1 Byte
word ptr [eax]
2 Byte
dword ptr [eax] ...
011、内存—内存管理与端序
🎨 颜色标记说明
粉色:特别重要、主线必掌握、优先复盘的内容。
蓝色:核心概念、术语、分类名。
橙色:需要关注的边界、易错点、注意事项。
绿色:解释类内容、帮助理解知识点。
返回:网络安全知识库 · 上一节:内存特性 · 下一节:内存读写与寻址
内存管理的三个动作对用户态程序来说,使用一块内存通常会经历三个阶段:
保留(Reserve)一段虚拟地址范围;
提交(Commit)页面,使其具备实际存储支持;
使用结束后释放(Release)。
调试器显示的是线性的虚拟地址,但操作系统会通过页表把虚拟页映射到物理页或其他后备存储。逆向入门阶段,先掌握“进程地址空间、页面和权限”即可,不需要一开始就陷入完整分页结构。
常见内存区域
区域
主要内容
典型特征
代码区
编译后的机器指令
通常可读、可执行
全局数据区
全局变量、静态变量
生命周期接近整个进程
栈
参数、返回地址、局部变量
每个线程独立,通常向低地址增长
堆
动态申请的数据
生命周期由程序控制
模块映像
EXE、DLL 的映射内容
可按 PE 节区划分
同一种 C/C++ 变量并不 ...
010、内存—内存特性
🎨 颜色标记说明
粉色:特别重要、主线必掌握、优先复盘的内容。
蓝色:核心概念、术语、分类名。
橙色:需要关注的边界、易错点、注意事项。
绿色:解释类内容、帮助理解知识点。
返回:网络安全知识库 · 上一节:标志寄存器 · 下一节:内存管理与端序
内存是什么内存(Memory)是 CPU 执行程序时临时保存代码和数据的空间。站在程序视角看,它更像一排连续编号的存储单元:编号是地址,单元中保存的是数据。
在 Windows 用户态调试器中看到的地址,通常是进程的虚拟地址,不是可以直接拿来表示物理内存条位置的物理地址。
概念
说明
示例
地址
存储单元的编号
00401000
内容
该地址当前保存的数据
55 8B EC
宽度
一次解释或访问多少位
BYTE、WORD、DWORD、QWORD
权限
页面允许的操作
读、写、执行
地址本身也是一个整数。在 32 位进程中,指针通常占 4 Byte;在 64 位进程中,指针通常占 8 Byte。
字节编址x86/x64 使用字节编址:每个地址对应 1 Byte,相邻地址相差 1。
12345地址 ...
009、存储—标志寄存器
返回:网络安全知识库 · 上一节:段寄存器 · 下一节:内存特性
🎨 颜色标记说明
粉色:特别重要、主线必掌握、优先复盘的内容。
蓝色:核心概念、术语、分类名。
橙色:需要关注的边界、易错点、注意事项。
绿色:解释类内容、帮助理解知识点。
标志寄存器
Visual Studio (一般不看这个)
X86DBG
EFLAGS:00000344
BIT:0000 0000 0000 0000 0000 0011 0100 0100
Bit 9:IF = 1(允许可屏蔽中断)
Bit 8:TF = 1(开启单步调试)
Bit 6:ZF = 1(运算结果为 0)
Bit 2:PF = 1(运算结果低 8 位中,1 的数量为偶数)
其余常用标志位:CF = 0、AF = 0、SF = 0、DF = 0、OF = 0。
注意:EFLAGS 的 Bit 1 是保留位,读取时固定为 1。
因此,若表示 CPU 实际读取的完整 EFLAGS,Bit 1 应计入,数值应为:
0x346 = 0000 0000 0000 0000 0000 0011 0100 0110
部分工具可能只根据具 ...
008、存储—段寄存器
返回:网络安全知识库 · 上一节:通用寄存器 · 下一节:标志寄存器
🎨 颜色标记说明
粉色:特别重要、主线必掌握、优先复盘的内容。
蓝色:核心概念、术语、分类名。
橙色:需要关注的边界、易错点、注意事项。
绿色:解释类内容、帮助理解知识点。
段寄存器
CPU 在保护模式下,主要通过分段机制和分页机制管理内存。
段寄存器:CS、SS、DS、ES、FS、GS。
段寄存器
英文
作用
CS
Code Segment
代码段寄存器
SS
Stack Segment
栈段寄存器
DS
Data Segment
数据段寄存器
ES
Extra Segment
附加数据段寄存器
FS
FS Segment
附加段寄存器
GS
GS Segment
附加段寄存器
在 Windows x86 环境中:用户模式(R3)下,FS → _TEB;内核模式(R0)下,FS → _KPCR。
R3:FS 常用于定位线程环境块(_TEB);R0:FS 常用于定位处理器控制区(_KPCR)。
在 Windows x64 环境中通常改用 GS:R3 下 GS → ...
007、存储—通用寄存器
返回:网络安全知识库 · 上一节:寄存器 · 下一节:段寄存器
🎨 颜色标记说明
粉色:特别重要、主线必掌握、优先复盘的内容。
蓝色:核心概念、术语、分类名。
橙色:需要关注的边界、易错点、注意事项。
绿色:解释类内容、帮助理解知识点。
通用寄存器
32 位寄存器 可以拆分使用,例如 EAX 可以拆成 AX、AH、AL。
EAX = 32 Bit,AX = EAX 的低 16 Bit,AH = AX 的高 8 Bit,AL = AX 的低 8 Bit。
AX 是 EAX 的低 16 位,AH 和 AL 是 AX 再拆出来的两个 8 位。
32 Bit
16 Bit
高 8 Bit
低 8 Bit
EAX
AX
AH
AL
EBX
BX
BH
BL
ECX
CX
CH
CL
EDX
DX
DH
DL
ESP
SP
-
-
EBP
BP
-
-
ESI
SI
-
-
EDI
DI
-
-
注意:传统 32 位 x86 中,只有 EAX、EBX、ECX、EDX 可以继续拆成 AH/AL、BH/BL、CH/CL、DH/DL。 ...
006、存储—寄存器
返回:网络安全知识库 · 上一节:整数存储 · 下一节:通用寄存器
🎨 颜色标记说明
粉色:特别重要、主线必掌握、优先复盘的内容。
蓝色:核心概念、术语、分类名。
橙色:需要关注的边界、易错点、注意事项。
绿色:解释类内容、帮助理解知识点。
寄存器
在 32 位 x86 环境 中,通用寄存器的完整宽度主要是 32 Bit。(x86别名x32,x86_64别名x64)
32 位通用寄存器的取值范围是 0x00000000 ~ 0xFFFFFFFF。
寄存器 位于 CPU 内部,每个 CPU 核心都有对应的一套寄存器。
通用寄存器:EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI。
段寄存器:CS、SS、DS、ES、FS、GS。
指令指针寄存器:EIP。
标志寄存器:EFLAGS。
注意:ESP 和 EBP 都和栈有关,ESP 通常指向栈顶,EBP 通常用于定位当前函数的栈帧。
寄存器
用途
编号
范围
EAX
累加器,乘除指令常使用 EAX
0
0x00000000 ~ 0xFFFFFFFF
ECX
循环计数器
1
0x00000000 ~ ...
0218、Windows 逆向提升:导出表、导入表与重定位
返回:Windows 逆向提升篇 · Windows 逆向总目录
这一部分是 PE 数据目录里最常用的三块:导出表、导入表、重定位表。导出表回答“我提供什么函数”,导入表回答“我依赖什么函数”,重定位回答“加载地址变了,哪些地方要修正”。
1、内容范围
小节
内容
复盘点
05.6 - 07.0
导出表
DLL 导出、导出地址表、名称表、序号表、GetProcAddress
07.1 - 07.7
导入表
IAT/INT、导入名称、序号导入、导入地址修复
07.8 - 08.6
重定位
基址差值、重定位块、重定位项、模拟修复
2、导出表导出表让别的模块能通过名称或序号找到 DLL 中的函数。
结构
作用
Export Directory
导出表总入口
AddressOfFunctions
函数地址表
AddressOfNames
函数名称表
AddressOfNameOrdinals
名称对应序号表
三表联动是导出表复盘重点:名称 -> 序号 -> 函数 RVA。
3、GetProcAddress 原理GetP ...
0219、Windows 逆向提升:无模块加载与模块隐藏原理
返回:Windows 逆向提升篇 · Windows 逆向总目录
这一部分涉及无模块加载、反射式加载、模块隐藏等双用途内容。这里只按 PE 加载机制、防护分析和检测复盘来整理,不写成可直接用于隐蔽加载的实现流程。
1、内容范围
小节
内容
复盘点
08.7 - 10.0
无模块加载
文件缓存、内存映像、导入修复、重定位修复、自加载流程
10.1 - 12.1
模块隐藏
反射式注入思路、私有映像、跨进程数据、远程入口点
2、文件状态与内存映像PE 文件不能简单按文件字节直接执行,加载器会按节表把文件状态转换成内存状态。
状态
特点
文件缓存
按 FileAlignment 排列
内存映像
按 SectionAlignment 排列
节区映射
每个节从文件偏移映射到 RVA
3、手动加载需要处理什么合法加载器会完成很多工作。复盘手动加载思路时,要理解这些工作点:
工作
说明
映像拉伸
把文件节映射到内存布局
导入修复
加载依赖 DLL,填充 IAT
重定位修复
基址变化时修正绝对地址
入口调用
满足前置条件后进入入口点
...
0220、Windows 逆向提升:资源、图标、异常与证书
返回:Windows 逆向提升篇 · Windows 逆向总目录
这一部分继续展开 PE 数据目录:资源目录保存图标、对话框、版本信息等;异常目录支持 x64 异常展开;安全证书用于签名校验。这些内容不是主代码,但对分析软件身份、界面资源和异常处理很重要。
1、内容范围
小节
内容
复盘点
12.2 - 14.4
资源与图标
资源目录层级、GUI SDK、图标组、ICO 提取
14.5 - 16.5
异常机制
SEH、VEH、x64 UNWIND、Runtime Function
16.6 - 16.8
安全证书
证书目录、特殊地址和模块证书解析
2、资源目录层级资源目录通常是三层:
1类型 -> 名称/ID -> 语言 -> 数据
常见资源类型:
类型
内容
ICON
图标数据
GROUP_ICON
图标组
VERSION
版本信息
DIALOG
对话框
STRING
字符串表
3、图标资源提取应用程序图标往往由图标组和多个图标图像组成。复盘时要区分:
项
说明
图标组
描述有哪些尺寸/ ...











