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

Windows逆向工程入门之MASM 数据寻址

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

目录

一、x64 体系下的全局变量与内存寻址

1. RIP 相对寻址机制

2. 全局变量访问原理

3. 内存分页机制

二、复合数据类型与内存布局

1. 结构体内存对齐

2. 多级指针解析

3. 栈内存分配策略


一、x64 体系下的全局变量与内存寻址

1. RIP 相对寻址机制

在 x64 架构中,由于地址空间扩展到 64 位,指令编码方式发生重大变革。RIP 相对寻址(RIP-relative addressing)成为默认寻址模式,其指令编码结构如下:

mov dword ptr [rip+0x000f9827], 2
; 机器码:C7 05 27 98 0F 00 02 00 00 00
  • 编码解析

    • C7:MOV 指令主操作码
    • 05:ModR/M 字节(00 000 101),表示 32 位位移寻址
    • 4字节位移值:27 98 0F 00(小端存储,实际偏移量 0xF9827)
    • 4字节立即数:02 00 00 00(小端存储,十进制值 2)
  • 地址计算验证

    指令地址:00007FF773DE97DC
    RIP 值:00007FF773DE97DC + 指令长度(7) = 00007FF773DE97E3
    最终地址:00007FF773DE97E3 + 0xF9824 = 00007FF773EE3007

2. 全局变量访问原理

在 x64 架构中,直接加载 64 位立即数到内存存在指令编码限制,需通过寄存器中转:

// C++ 代码
g_var = 0x12345678abcdef;

// 对应汇编实现
movabs rax, 0x12345678abcdef  ; 48 B8 EF CD AB 78 56 34 12 00
mov qword ptr [rip+0xf9824], rax ; 48 89 05 24 98 0F 00

3. 内存分页机制

Windows 采用 4KB 分页管理,关键数据结构:

结构名称大小描述
PML4 (CR3)4096 项顶级页表,每项 8 字节
PDPT512 项页目录指针表,每项 8 字节
PDT512 项页目录表,每项 8 字节
PTE512 项页表项,每项 8 字节

逆向分析技巧:

!pte 00007FF773EE3000  # WinDbg 查看页表结构
dt _MMPTE 7FF773EE3000 # 解析 PTE 字段

二、复合数据类型与内存布局

1. 结构体内存对齐

#pragma pack(push, 4)
struct MyStruct {
    int a;      // 偏移 0x00
    int b;      // 偏移 0x04
};              // 总大小 8 字节
#pragma pack(pop)

内存布局验证(小端序):

0x0019FED8: 44 33 22 11   // a = 0x11223344
0x0019FEDC: 88 77 66 55   // b = 0x55667788

2. 多级指针解析

在 x64 环境下,指针操作展现新的特性:

char**** p4 = reinterpret_cast<char****>(0x0000003E0F1BF8B4);

内存访问链:

p4 → p3 → p2 → p1 → ch=0x11

3. 栈内存分配策略

x64 调用栈典型布局(函数序言):

sub rsp, 28h                ; 分配栈空间
mov [rsp+20h], rbx          ; 非易失寄存器保存

http://www.dtcms.com/a/53962.html

相关文章:

  • GTID模块初始化简介和参数binlog_gtid_simple_recovery
  • C#数据类型及相互转换
  • GitHub获取token
  • 计算光学成像与光学计算概论
  • typedef关键字、using关键字
  • RoboBrain:从抽象到具体的机器人操作统一大脑模型
  • 初阶数据结构习题【11】(3顺序表和链表)——141. 环形链表I
  • vue面试宝典之二
  • Linux14-io多路复用
  • Impacket工具中的横向渗透利器及其使用场景对比详解
  • Vue进阶之Vue3源码解析(二)
  • 零基础学习Python之面向对象编程:属性访问控制与封装实现_我的学习Python记录13
  • QT中使用C++调用 python脚本
  • DeepSeek大模型 —— 全维度技术解析
  • 基于MD5分块哈希的前端图片重复检测方案
  • 系统运维分级掌握知识技能
  • 晶晨S905L3S/S905L3SB芯片烧录-BL(bootloader)加载工具分享
  • 外键 FK enable constraints enq:TM lock
  • ubuntu局域网部署stable-diffusion-webui记录
  • Java锁
  • AF3 curry1函数解读
  • 洛谷P1102 A-B 数对
  • 计算机组成原理---操作系统Linux
  • Mybatis 的关联映射(一对一,一对多,多对多)
  • 是德科技十周年:以创新丈量未来,用科技赋能世界
  • springboot项目使用中创InforSuiteAS替换tomcat
  • makefile新手入门教程
  • 【内网服务发布公网】
  • 《水利水电安全员考试各题型对比分析及应对攻略》
  • nftables 入门:简洁高效的 Linux 防火墙管理