首页
社区
课程
招聘
[旧帖] 帮忙看看这个导出函数 0.00雪花
发表于: 2015-5-3 18:17 2604

[旧帖] 帮忙看看这个导出函数 0.00雪花

2015-5-3 18:17
2604

不知道截图能不能看明白我的提问,我在分析itunesMobileDevice.dll的导出函数进行调用,其他几个都好了,就是这个AMDeviceSecureRestoreApplication搞不明白,参数传进去总返回参数错误的提示,通过IDA看到确实在函数的入口进行了两个判断,但是我不知道这两个判断对应的是那两个参数。请高人帮忙分析一下,谢谢。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
x64上面默认的函数调用约定是 fast call ,也就是 ABI 是 fast call ;
一个函数在调用时,前四个参数是从左至右依次存放于RCX、RDX、R8、R9寄存器里面,剩下的参数从左至右顺序入栈;
调用者负责在栈上分配32字节的“shadow space”,用于存放那四个存放调用参数的寄存器的值(亦即前四个调用参数);
小于64位(bit)的参数传递时高位并不填充零(例如只传递ecx),大于64位需要按照地址传递;
被调用函数的返回值是整数时,则返回值会被存放于RAX;
被调用函数不负责清栈,调用者负责清理栈;
RAX,RCX,RDX,R8,R9,R10,R11是“易挥发”的,不用特别保护,其余寄存器需要保护。(x86下只有eax, ecx, edx是易挥发的)
栈需要16字节对齐,“call”指令会入栈一个8字节的返回值(注:即函数调用前原来的RIP指令寄存器的值),这样一来,栈就对不齐了(因为RCX、RDX、R8、R9四个寄存器刚好是32个字节,是16字节对齐的,现在多出来了8个字节)。所以,所有非叶子结点调用的函数,都必须调整栈RSP的地址为16n+8,来使栈对齐。
对于 R8~R15 寄存器,我们可以使用 r8, r8d, r8w, r8b 分别代表 r8 寄存器的64位、低32位、低16位和低8位。
2015-5-3 21:16
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
给分吧.
2015-5-3 21:17
0
游客
登录 | 注册 方可回帖
返回
//