Windows逆向工程入门之MASM STRUCT
- 公开视频 -> 链接点击跳转公开课程
- 博客首页 -> 链接点击跳转博客主页
目录
一、MASM结构体(STRUCT)核心机制
1.1 内存布局与对齐规则体系
1.1.1 自然对齐原则
1.1.2 高级对齐控制
1.2 复杂结构体操作规范
1.2.1 多维嵌套结构
1.2.2 动态成员访问技术
1.3 逆向工程特征识别
1.3.1 内存访问模式特征
1.3.2 API调用模式分析
二、联合体(UNION)高级应用机制
2.1 内存共享原理实现
2.2 类型双关技术实践
2.2.1 浮点与整型转换
2.2.2 协议解析优化
一、MASM结构体(STRUCT)核心机制
1.1 内存布局与对齐规则体系
1.1.1 自然对齐原则
DATA_PACKET STRUCT
header DB ? ; 偏移0 (1字节)
payload DW ? ; 偏移2 (2字节对齐)
crc32 DD ? ; 偏移4 (4字节对齐)
DATA_PACKET ENDS ; 总尺寸8字节
- 对齐计算公式:偏移地址 = 前成员结束地址 + (类型大小 - (前成员结束地址 % 类型大小)) % 类型大小
1.1.2 高级对齐控制
ALIGN 8 ; 强制8字节对齐
OPTION ALIGN:16 ; 全局16字节对齐
ORG $+3 ; 手动填充3字节
1.2 复杂结构体操作规范
1.2.1 多维嵌套结构
VEHICLE STRUCT
engine DWORD ?
position POINT <>
driver STRUCT
id DWORD ?
status BYTE ?
ENDS
VEHICLE ENDS ; 总尺寸4+8+(4+1+3填充)=20字节
1.2.2 动态成员访问技术
mov esi, OFFSET vehicleObj
assume esi:PTR VEHICLE
mov eax, [esi].driver.id ; 显式类型声明访问
mov ecx, [esi].position.X ; 嵌套结构访问
assume esi:NOTHING
1.3 逆向工程特征识别
1.3.1 内存访问模式特征
; 典型结构体访问指令序列
lea edi, [ebp-0x20] ; 获取结构体基址
mov eax, [edi+0x0C] ; 访问第三个成员
cmp dword ptr [edi+0x10], 0xFFFF
1.3.2 API调用模式分析
push [esi].WIN32_FIND_DATA.cFileName ; 结构体成员作为参数
call printf
add esp, 4
二、联合体(UNION)高级应用机制
2.1 内存共享原理实现
IP_ADDRESS UNION
asDWORD DD ? ; 32位整型存储
asBYTE DB 4 DUP(?) ; 4字节数组
asWORD DW 2 DUP(?) ; 2字数组
IP_ADDRESS ENDS ; 总尺寸4字节
2.2 类型双关技术实践
2.2.1 浮点与整型转换
FLOAT_INT UNION
f REAL4 ?
i DWORD ?
FLOAT_INT ENDS
mov [esi].f, 3.1415 ; 浮点写入
mov eax, [esi].i ; 整型读取
2.2.2 协议解析优化
NET_FRAME UNION
raw DB 64 DUP(?)
head STRUCT
type BYTE ?
length WORD ?
ENDS
payload DWORD ?
NET_FRAME ENDS