UltraDebug

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: A C D R G Y M Z X S P
公益项目,接受捐赠
查看: 1936|回复: 0
收起左侧

[原创] 新手福利——x64逆向基础

[复制链接]
IMG1257

主题

0

回帖

UD

新手上路

UID
49
积分
34
注册时间
2022-5-18
最后登录
1970-1-1
2023-2-21 21:58:10 | 显示全部楼层 |阅读模式
一、x64程序的内存和通用寄存器
随着游戏行业的发展,x32位的程序已经很难满足一些新兴游戏的需求了,因为32位内存的最大值为0xFFFFFFFF,这个值看似足够,但是当游戏对资源需求非常大,那么真正可以分配的内存就显得捉襟见肘了,于是很多公司尝试并成功的开发了64位的游戏。并且很多32位的游戏也在向64位转型。
很多初学者在刚刚接触64位程序时会觉得很陌生,想象着这是一个新的领域,会比32位的分析难度高很多。其实当你对32位的逆向有一定的基础和理解的时候,再来看64位就不那么难了。
64位与32位最直观的区别就是他可分配的内存最大值是0xFFFFFFFFFFFFFFFF。有人可能会说这也就比32位的多了一倍,其实不然,他的大小是32位的0x100000000倍。这个大小就足够我们去使用了,甚至当你在分析64位的游戏时会发现,很多地址也仅仅是1XXXXXXXX,因为目前来说这些也就足够了。
64位与32位逆向的第二个区别就是他的通用寄存器,他的通用寄存器为16个而不是8个(如图)
新手福利——x64逆向基础 - IMG1257_UltraDebug

在这16个寄存器中,前面8个的名字与32位的很像,只是前面的E改为了R。后面的8个则以R8-R15命名。当然我们所说的这16个是通用寄存器,而后面还有16个128位的XMM寄存器(如图)以及16个256位的YMM寄存器
新手福利——x64逆向基础 - IMG1257_UltraDebug

在初学者的学习中,我们主要来学习通用寄存器的使用。
RAX与EAX的作用是类似的,他主要用来存放函数的返回值,他的数值也是经常会变化的(如图)
新手福利——x64逆向基础 - IMG1257_UltraDebug

图中是一个随意截取的一断64位函数代码,函数后面的RAX传递给RDI,其实就是将返回值进行传递,这里了解一下即可,后面还会详细讲解。
RCX,RDX,R8,R9则常常会做为第1-4个参数(如图)
新手福利——x64逆向基础 - IMG1257_UltraDebug

图中是一个程序调用send函数的代码,RCX-R9分别为函数的s,buf,len,flags,当然这只是前4个参数,详细的内容我们放到后面来讲。
RSP和32位中的ESP是类似的,同样作为堆栈指针(如图)
新手福利——x64逆向基础 - IMG1257_UltraDebug

RBP虽然偶尔会用来作为帧指针,也就是所谓的栈底,但是显然没有32位用的频繁,下图则是RBP在函数头部被赋值的情况(如图)
新手福利——x64逆向基础 - IMG1257_UltraDebug

当然RBP也常常会被用作普通的寄
还有更多的精彩内容,作者设置为付费后可见
UltraDebug免责声明
✅以上内容均来自网友转发或原创,如存在侵权请发送到站方邮件9003554@qq.com处理。
✅The above content is forwarded or original by netizens. If there is infringement, please send the email to the destination 9003554@qq.com handle.
回复 打印

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|站点地图|UltraDebug ( 滇ICP备2022002049号-2 滇公网安备 53032102000034号)

GMT+8, 2025-6-18 20:35 , Processed in 0.032840 second(s), 11 queries , Redis On.

Powered by Discuz X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表