吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2029|回复: 9
收起左侧

[新手问题] X64dbg中fastcall约定的第五个参数怎么找

[复制链接]
jy04468108 发表于 2021-6-9 11:11
网上都是说的超过4个参数,使用栈来传递,那么这个栈是如何传递的,如何找到栈地址。


image.png

image.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

揰掵佲 发表于 2021-6-9 12:26
jy04468108 发表于 2021-6-9 12:15
主要是rsp的值是在调用的时候确定的?
为什么x64dbg里面显示的第五个参数是rxp+0x28?

我这里说的是全部按照长整数来算的
你说的这个情况,我看到过一篇文章有说明

https://bbs.pediy.com/thread-247887-1.htm

网上的文档说明,往往都忽略了浮点数参数的传递和参数位置对齐的问题.
比如参数1和2是整数,参数3和4是浮点数,参数5是整数,那么他们对应的位置是rcx,rdx,xmm2,xmm3,[rsp+(5*0x8)](进入函数体后,rbp会被压入栈顶),坑就坑在这个栈上面,编译器优化的话,为了保存快速调用,被压入寄存器的参数,依然会霸占栈内存的,而某些情况下,也可能出现不霸占栈内存的情况,这个纯属看编译器优化了.
类似的调用约定,和clrcall差不多.clrcall更坑,分为32位clrcall和64位clrcall,而64位clrcall又很像fastcall....
之前我做JIT的时候,就被这些东西搞得晕坨坨的.
张傻子 发表于 2021-6-9 11:18
 楼主| jy04468108 发表于 2021-6-9 11:22
揰掵佲 发表于 2021-6-9 11:28
rcx
rdx
r8
r9
rsp+0x20
rsp+0x28
rsp+0x30
rsp+0x38
rsp+0x40
rsp+0x48
rsp+0x50
rsp+0x58
rsp+0x60
rsp+0x68
rsp+0x70

1~15参数
 楼主| jy04468108 发表于 2021-6-9 12:15

主要是rsp的值是在调用的时候确定的?
为什么x64dbg里面显示的第五个参数是rxp+0x28?
无闻无问 发表于 2021-6-9 12:16
超过4个,先压了rcx,rdx,r8,r9,后压的地址在他们之后,最接近rbp的,相当于夹在中间了…我觉得应该是这样吧
lies2014 发表于 2021-6-9 12:50
jy04468108 发表于 2021-6-9 12:15
主要是rsp的值是在调用的时候确定的?
为什么x64dbg里面显示的第五个参数是rxp+0x28?

都没有错,如果你在call执行前断下就是[rsp+0x20],进入call后因为栈顶变了,因此当前的[rsp+0x28]才是执行call前的[rsp+0x20]
 楼主| jy04468108 发表于 2021-6-9 13:05
本帖最后由 jy04468108 于 2021-6-9 13:09 编辑
揰掵佲 发表于 2021-6-9 12:26
我这里说的是全部按照长整数来算的
你说的这个情况,我看到过一篇文章有说明
@lies2014
那么问题来了,如果我是64位托管代码调用的非托管方法,此时是不是用的64位的clrcall?
这种情况下,如果调用的方法中参数是ref或者out的,怎么从非托管代码中把值返回到托管代码中。
揰掵佲 发表于 2021-6-9 14:44
jy04468108 发表于 2021-6-9 13:05
@lies2014
那么问题来了,如果我是64位托管代码调用的非托管方法,此时是不是用的64位的clrcall?
这种 ...

我复制的文章原,对我而言,我的结论就是我说的那些参数顺序. 我没纠结这么多
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 02:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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