首页 > 其他分享 >加密与解密x64逆向——寄存器和函数调用

加密与解密x64逆向——寄存器和函数调用

时间:2023-04-21 23:23:43浏览次数:42  
标签:函数 x64 函数调用 64 寄存器 参数


64位软件逆向技术

寄存器

本节讨论的x64是AMD和INTEL64的合成,是指与现有x86兼容的64位CPU。在64位系统中,内存地址为64位。
x64系统通用寄存器的名称,第一个字母从E改为R“RAX”,大小扩展到64位,数量增加8个,扩充了8个128位XMM寄存器。

函数

1.栈平衡

RSP用来保存当前的栈顶指针,每8个字节的栈空间来保存一个数据。

栈中存储的数据主要包括局部变量,函数参数,函数返回地址等。每调用一个函数,函数都要申请相应的栈空间。当函数调用完成时需要对刚才申请的栈空间进行释放,这就是栈平衡。
如果不进行栈平衡,栈内存很快就会被消耗光。

2.启动函数

前面有讲,不再重复。

3.调用约定

与之前不同,x64程序只有一种寄存器快速调用约定。前四个参数使用寄存器传递,如果参数超过四个,多于的参数放在栈里,入栈顺序从右到左,由函数调用方平衡栈空间。

前四个参数虽然使用了寄存器来传递,但还是在栈中为4个参数预留了空间。为方便叙述,这里称之为预留栈空间。在x64中如果像之前那样前四个用寄存器传递那么在函数中相当于少了四个寄存器。当函数功能比较复杂可能导致寄存器不够用,为了避免这个问题,就可以使用预留栈空间。

4.参数传递

参数小于四个时,通过寄存器传递。

4个以上参数传递,后面的通过栈传递。


参数为结构体,且大小不超过8字节,这时应该直接把整个结构体的内容放在寄存器当中,通过访问寄存器的高32位和低32位来访问结构体成员。


大于8字节时


可以见得大于8个字节时,传递参数时会把结构内容复制到栈空间,再把结构体地址当做函数的参数来进行传递(引用传递),
thiscall传递,是C++类的成员函数调用约定。


由此可知类的成员函数调用,参数传递方式与普通函数没很大的区别,唯一的区别是成员函数调用会隐含地传递一个this指针参数。

5.函数返回值

在64位环境中,使用RAX寄存器来保存函数返回值。返回值类型由浮点类型使用MMX0寄存器返回。RAX寄存器可以保存8字节数据。当返回值大于8字节,可以将栈空间的地址作为参数间接访问达到目的。

标签:函数,x64,函数调用,64,寄存器,参数
From: https://www.cnblogs.com/bonelee/p/17342181.html

相关文章

  • 加密与解密x64逆向——变量、if和switch、循环语句
    数据结构主要是对局部变量,全局变量,数组等的识别。1.局部变量局部变量是函数内定义的变量,存放的内存区域称之为栈区。生命周期就是从函数进入到返回释放。函数在入口处申请了预留栈空间和局部变量空间,也就是subrsp,30h。局部变量空间在高地址。在应用程序被编译成release版本......
  • 加密与解密x64逆向——虚函数
    4.整数的取模取模运算可以通过除法指令实现。一般的优化做法是将其转换成等价的位运算或者除法运算,再由除法运算进行优化。虚函数C++的三大核心机制是封装,继承,多态,而虚函数就是多态的一种体现。软件逆向中,难免遇到使用面向对象思想设计的软件,而虚函数就是在实际软件逆向过程中......
  • 【逆向】x64程序逆向基础——调用约定和栈使用
    【逆向】x64程序逆向基础 主要区别1.所有地址指针都是64位。2.增加和扩展新的寄存器,并兼容原32位版本的通用寄存器。3.原指令指针寄存器EIP扩展为RIP。寄存器1.64位寄存器兼容原32位寄存器。2.新增加8个XMM寄存器(XMM8-XMM15)。3.扩展原32位寄存器的64位版本,并......
  • 粒子群优化算法-Python版本和Matlab函数调用
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • Android中架构X64与X32的不同
    1.Android中架构X64与X32的不同。众所周知,安卓支持3类处理器(CPU):ARM,Intel和MIPS。其中ARM无疑被使用得最为广泛。Intel因为普及于台式机和服务器而被人们所熟知,然而对移动行业影响力相对较小。MIPS在32位和64位嵌入式领域中历史悠久,获得了不少的成功,可目前Android的采用率在三者......
  • Linux系统bootx64是怎么引导grub的
    在Linux系统中,bootx64.efi是一个启动加载程序,用于引导GRUB。GRUB(GrandUnifiedBootloader)是一个开源的多操作系统引导加载程序,用于加载和启动Linux、Windows和其他操作系统。当计算机启动时,UEFI固件会读取硬件设备、分区和文件系统来找到可引导的EFI程序。如果GRUB已经安装在硬......
  • 支持win8 x32和x64的抓包软件Microsoft Network Monitor
    win8系统中N多常用软件水土不服,其中包括工作中常用的抓包神器wireshark,wireshark在win8系统驱动加载失败不能获取网卡不能抓包。搜索资料库MicrosoftNetworkMonitor脱颖而出,MicrosoftNetworkMonitor支持TCP/Ip、UDP等底层协议的捕获抓包,并且有包过滤功能方便分析。Micros......
  • 新萝卜家园GHOST WIN7 电脑城旗舰版X64
    新萝卜家园GHOSTWIN7电脑城旗舰版X64v2020.03是一款能够为你提供大量好用的功能的精品装机系统,超多好用的办公软件等,常用驱动等,全部为你准备完毕了哦,如果你对这款系统有需要的话,就快来下载吧~新萝卜家园GHOSTWIN7电脑城旗舰版X64v2020.03优化:1、加快开始菜单弹出速度;2......
  • 【逆向】使用x64dbg实现qq私聊与群消息防撤回
    由于qq是32位的所以需要用x32dbg调试,打开x32dbg。开启qq后打开想要用来测试的聊天窗口,因为这里首先进行私聊的防撤回,所以打开的是用户的聊天窗口。然后回到x32dbg,点击文件->附加,找到聊天窗口的进程,点击附加。附加后先到断点选项卡里禁用所有断点,然后在工具栏里找到调试,然后......
  • [Windows] 单文件制作工具 7.0.2.38_x86_x64
    单文件制作工具7.0.2.38_x86_x64最初由无忧527104427开发,到V7.0.1.1版停止更新,源码赠与有缘人,后续版本由无忧JexChan接手继续更新。本工具是一款小巧自定义功能强大的PECMD/7zSFX单文件制作工具,简化单文件制作程序步骤,默认四步即可制作出一个单文件,可制作出强大功能的单文件程序......