Windows逆向工程入门之MASM等号伪指令(= & EQU)

  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> ​​​链接点击跳转博客主页

目录

一、核心伪指令对比分析

二、EQU伪指令深层机制

三、逆向工程特征识别


一、核心伪指令对比分析

1. 定义与重定义能力

特性 等号(=) EQU
重复定义 支持 禁止(编译时报错)
作用域 当前模块 当前模块
类型检查 支持(数值/字符串/结构体)
预处理阶段行为 文本替换 符号绑定

2. 典型应用场景对比

; = 适用场景:动态配置
BufferSize = 1024    ; 可后续修改
buffer BYTE BufferSize DUP(?)

; EQU 适用场景:固定常量
MAX_ITER EQU 1000    ; 不可变数学常数

二、EQU伪指令深层机制

1. 强类型系统支持

  • 数值类型精确控制

    FLOAT_CONST EQU 3.14      ; 错误!需用 REAL4 定义
    DWORD_CONST EQU 0FFh      ; 正确:32位整型
  • 字符串常量定义

    ERROR_MSG EQU <"Access Violation">  ; 带尖括号的字符串

2. 结构体偏移量定义

ProcessStruct STRUCT
  PID    DWORD ?
  Name   BYTE 32 DUP(?)
ProcessStruct ENDS

; 使用EQU定义偏移量
PID_OFFSET EQU ProcessStruct.PID     ; 0
NAME_OFFSET EQU ProcessStruct.Name   ; 4

3. 条件编译控制

DEBUG_MODE EQU 1
IF DEBUG_MODE
  include debug.inc
ENDIF

三、逆向工程特征识别

1. 二进制表现差异

  • 等号(=)的编译特征

    ; 源代码:mov eax, Count (Count=5)
    B8 05 00 00 00         ; 直接替换为立即数
  • EQU的编译特征

    ; 源代码:mov ebx, MAX_ITER (MAX_ITER EQU 1000)
    81 FB E8 03 00 00      ; cmp ebx,1000 (可能被优化)

2. 数据结构重建技巧

  • 结构体成员定位

    ; 原始代码访问:
    mov eax, [esi + NAME_OFFSET]
    ; 逆向推导:
    ; 结构体第4字节处为32字节数组
  • 枚举类型识别

    ; 原始定义:
    ErrorCodes EQU {
      ERR_OK = 0,
      ERR_TIMEOUT = 1,
      ERR_MEMORY = 2
    }
    ; 反汇编特征:
    cmp eax, 2
    je MemoryErrorHandler

你可能感兴趣的:(windows,汇编,c语言,安全,逆向)