当前位置: 首页 > article >正文

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

http://www.kler.cn/a/571422.html

相关文章:

  • Visual Studio Code 如何编写运行 C、C++ 程序
  • 多线程与异步任务处理(二):Kotlin协程
  • 【Linux篇】第一个系统程序 - 进度条
  • 【Laplacian边缘检测详解】
  • Compose Multiplatform开发记录之文件选择器封装
  • 三方库总结
  • 【Linux】【网络】UDP打洞-->不同子网下的客户端和服务器通信(成功版)
  • 鸿蒙与DeepSeek深度整合:构建下一代智能操作系统生态
  • 【leetcode hot 100 189】轮转数组
  • 从零开始学习Slam--数学概念
  • 《Operating System Concepts》阅读笔记:p180-p187
  • 蓝桥杯 2020 国赛 阶乘约数
  • 自学微信小程序的第十天
  • [liorf_localization_imuPreintegration-2] process has died
  • python全栈-Linux基础
  • 【Linux】进程信号——信号保存和信号捕捉
  • 【大模型】什么是蒸馏版大模型
  • 【零基础到精通Java合集】第二十三集:G1收集器深度解析
  • 鸿蒙5.0实战案例:基于ArkUI的透明页面效果
  • BambuStudio学习笔记:GCode 类