铜仁市论坛

首页 » 分类 » 常识 » 寻找64位程序数据结构
TUhjnbcbe - 2021/1/18 2:59:00

在接触64位程序之前,先简单的来了解一下32寄存器和64的区别:

64位有16个寄存器,32位只有8个。但是32位前8个都有不同的命名,分别是e_,而64位前8个使用了r代替e,也就是r_。e开头的寄存器命名依然可以直接运用于相应寄存器的低32位。而剩下的寄存器名则是从r8-r15,其低位分别用d,w,b指定长度。

32位使用栈帧来作为传递的参数的保存位置,而64位使用寄存器,分别用rdi,rsi,rdx,rcx,r8,r9作为第1-6个参数。rax作为返回值

64位没有栈帧的指针,32位用ebp作为栈帧指针,64位取消了这个设定,rbp作为通用寄存器使用

64位支持一些形式的以PC相关的寻址,而32位只有在jmp的时候才会用到这种寻址方式。

其实在有厚实32逆向基础的情况下,64整体上和32区别不大。

以某64游戏为例子(主流游戏,避免不必要的麻烦,文中不会出现任何游戏画面的截图):

无论开发什么游戏,对象坐标都是无法略过的关键,那么以对象坐标为例子。打开CE,注意:64位程序,需要对应的64位CE。扫描类型选择浮点或者双浮点。

首先尝试搜索未知的float,在这里,建议以Z坐标为突破口。人物站在高处,搜索增加的数值,人物在低处,搜索减少的数值,重复赛选。(注意:64程序相比32,会大很多,从而赛难度也增加,需要一定耐心)。

在经过重复赛选后,得到了以下

1
查看完整版本: 寻找64位程序数据结构