如果你之前写的是 32 位汇编,或者只会在 OD、x64dbg 里看反汇编而不敢改,那这门课解决的就是中间那道坎:从「能读懂」到「能动手写 64 位汇编」。这门课不铺开讲全部指令集,而是把 X64 相对 32 位真正变了的东西挑出来讲清楚——寄存器、调用约定、环境搭建、外部函数调用、全局变量定位。这五件事任何一件没搞明白,后面看内核代码都会卡住。
先说清楚:缺口在哪里
32 位汇编时代积累的很多直觉,到了 X64 会直接失效。最典型的是传参:32 位下你习惯看栈上的 [esp+4]、[esp+8],到了 X64 前四个参数走寄存器,栈上的偏移全部重算,照着老经验去读栈只会读出一堆错值。再比如通用寄存器从 8 个变成 16 个,还多了 r8–r15 这一组,以及 r8d、r8w、r8b 这种按宽度切分的写法,看反汇编时很容易认错宽度导致理解偏差。还有指针宽度、指令编码长度、调用时的栈对齐要求,这些细节不影响你「看懂大意」,但影响你「写出能跑的代码」。
这门课针对的就是这类具体缺口,不是泛泛讲「汇编很重要」。
课程会碰到的几个硬点
- X64 新增寄存器与命名规则:什么时候用 r8 全宽,什么时候只能用 r8d,宽度不匹配会出现什么后果。
- VS 下的 64 位汇编环境:如何在 Visual Studio 里把 64 位汇编工程跑起来,包括项目配置和常见报错的处理。
- 64 位传参机制:寄存器传参 + 影子空间(shadow space)这套规则,以及它和 32 位栈传参的实际差异。
- 在汇编里调用外部函数:参数怎么摆、返回值怎么取、调用前后栈怎么恢复。
- 全局变量的定位:在 64 位下用 RIP 相对寻址找到全局变量,而不是沿用 32 位的绝对地址思路。
这几个点之间是递进关系:寄存器认不全,传参就看不懂;传参不清楚,调用外部函数必然出错;寻址方式不换脑子,全局变量就定位不到。所以建议按顺序过,别跳。
配套练习建议怎么做
光看不练,X64 汇编是学不会的。建议每学一个点就配一个小练习,而且练习要能「看到结果」:
- 环境搭好后,先写一个只做加减、把结果放进 rax 的函数,单步跟一遍寄存器变化。
- 传参部分,写一个 5 个参数的函数,第 5 个参数走栈,自己算一遍偏移,验证对错。
- 调用外部函数时,故意把栈对齐搞错一次,看看崩在哪里——这个错误比正确写法更有价值。
- 全局变量部分,把同一段寻址代码在 32 位和 64 位下各写一遍,对比差异。
如果练习过程中频繁卡在环境或编译报错上,说明前面的环境搭建部分还没吃透,回头补,不要硬往前推。
学完应该能回答的问题
检验自己是否真的掌握,看能不能不看资料回答下面这些:
- X64 下前四个整型参数分别放在哪个寄存器?第五个开始从哪里取?
- r8 和 r8d 有什么区别,什么时候必须用 r8d?
- 64 位汇编里调用一个外部函数,调用前需要保证什么?
- 为什么 64 位下定位全局变量常用 RIP 相对寻址,而不是绝对地址?
- 同样的逻辑,32 位和 64 位汇编代码在结构上主要差在哪几处?
这五个问题能答顺,说明你已经跨过了 32 位到 64 位那道坎;答不顺的地方,就是还需要回头补的章节。这门课偏底层、偏实操,适合已经有一点汇编基础、又必须面对 64 位环境的人。基础为零的话,建议先把 32 位汇编的基本指令和栈操作过一遍再来。
Windows内核-X64汇编
课程详情
课程标题:Windows内核-X64汇编
本课程旨在帮助学员深入了解X64汇编语言,并探讨其与32位汇编的差异。通过本课程的学习,学员将能够掌握X64新增的寄存器、VS集成64位汇编环境、64位汇编传参问题以及汇编中调用外部函数和全局变量定位等核心知识。
适合人群
- 对游戏安全感兴趣的人群
学习收获
- 掌握X64汇编语言的基础知识和应用技巧
- 了解X64汇编与32位汇编的差异
- 学会在VS集成64位汇编环境中进行编程
- 解决64位汇编传参和调用外部函数的问题
- 定位全局变量在汇编中的位置
课程亮点
- 深入浅出地讲解X64汇编的核心概念
- 结合实际案例,提高学员的实践能力
- 系统化学习,构建完整的汇编知识体系
课程目录
01 01.寄存器.mp4 02 02.VS集成64位汇编环境.mp4 03 03.传参.mp4 04 04.汇编里面调用外部函数.mp4 05 05.全局变量定位.mp4





