欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > Windows逆向工程入门之MASM x64架构与调用约定实战指南

Windows逆向工程入门之MASM x64架构与调用约定实战指南

2025/7/5 22:25:37 来源:https://blog.csdn.net/2301_80612536/article/details/146053464  浏览:    关键词:Windows逆向工程入门之MASM x64架构与调用约定实战指南
  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> ​​​链接点击跳转博客主页

目录

一、x64架构核心变革与寄存器体系

1. x64架构特性升级

2. 寄存器访问模式

二、x64调用约定深度解析

1. Microsoft x64调用约定

2. 函数调用实例分析

3. 复杂参数处理

三、混合编程与ABI规范

1. 汇编与C++交互实践

四、逆向工程核心技术实战

1. 函数帧栈分析


一、x64架构核心变革与寄存器体系
1. x64架构特性升级
  • 地址空间扩展
    • 虚拟地址宽度64位(实际使用低48位)
    • 内存布局划分:
      0x00000000`00000000 - 0x00007FFF`FFFFFFFF  // 用户空间
      0xFFFF8000`00000000 - 0xFFFFFFFF`FFFFFFFF  // 内核空间
  • 寄存器扩展
    寄存器类别x86(32位)x64扩展
    通用寄存器EAX, EBX等8个RAX-R15(新增R8-R15)
    指令指针EIPRIP
    标志寄存器EFLAGSRFLAGS
2. 寄存器访问模式
mov rax, 1234ABCDh     ; 64位访问
mov eax, 56789ABCDh    ; 32位访问(自动清零高32位)
mov ax,  0BEEFh        ; 16位访问
mov al,  0FFh          ; 8位访问(低字节)

二、x64调用约定深度解析
1. Microsoft x64调用约定
  • 参数传递规则
    参数1 → RCX      参数2 → RDX
    参数3 → R8       参数4 → R9
    后续参数 → 从右向左压栈
  • 调用者职责
    • 分配至少32字节影子空间
    • 保证栈16字节对齐(RSP & 0xF == 0
2. 函数调用实例分析

C++函数声明

extern "C" int64_t asm_Add(int a, int b);

MASM实现

asm_Add proc; 影子空间自动分配(编译器处理)add rcx, rdx      ; a + bmov rax, rcx      ; 返回值存入RAXret
asm_Add endp

逆向特征识别

00007FF7A1B21000 48 8B C1         mov rax, rcx
00007FF7A1B21003 48 03 C2         add rax, rdx
00007FF7A1B21006 C3               ret
3. 复杂参数处理

6参数函数调用

int _fastcall Fun(int a, int b, int c, int d, int e, int f);

汇编调用逻辑

mov r9d, 4            ; 参数4 → R9
mov r8d, 3            ; 参数3 → R8
mov edx, 2            ; 参数2 → EDX
mov ecx, 1            ; 参数1 → ECX
push 6                ; 参数6压栈(从右向左)
push 5                ; 参数5压栈
call Fun
add rsp, 16           ; 清理栈参数

三、混合编程与ABI规范
1. 汇编与C++交互实践

外部函数声明

EXTERN Fun:proc       ; 声明C++函数
EXTERN printf:proc   ; 声明标准库函数

跨语言调用示例

call Fun             ; 调用C++函数
lea rcx, formatStr   ; 参数1 → RCX
lea rdx, message     ; 参数2 → RDX
call printf          ; 调用printf

四、逆向工程核心技术实战
1. 函数帧栈分析

典型栈帧结构

RBP+0x20   → 影子空间(32字节)
RBP+0x28   → 返回地址
RBP+0x30   → 保存的RBP
RBP+0x38   → 局部变量

栈操作逆向特征

00007FF7CFA4BA94 48 81 EC 28 01 00 00 sub  rsp, 128h    ; 分配栈空间
00007FF7CFA4BA9B 48 8D 6C 24 20       lea  rbp, [rsp+20h] ; 建立栈帧

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词