首页
社区
课程
招聘
[原创]IDA 8.3对于函数调用约定和参数个数的问题
发表于: 2024-7-31 21:02 2024

[原创]IDA 8.3对于函数调用约定和参数个数的问题

2024-7-31 21:02
2024

众所周知,IDA是一款非常不错的静态分析软件。其中F5奇迹更是拯救了无数个熬夜突击反汇编的程序猿。但IDA最新版8.3却在判断调用约定时出了毛病。

一、fastcall与usercall的判定


如图所示,这个函数的F5结果是fastcall,参数4个。但你按照这个去hook那肯定报错。
首先是调用约定,我们去asm看看:


虽然我们看到后面pop寄存器来平栈,但最后还是用sbp传入esp恢复入栈时的环境,所以不是fastcall,而是stdcall。
什么?你说不保险?那再看看他的一个调用的asm看看:

他只有三个push(这里后面会讲为什么有问题),还有两个参数靠edx和ecx传参,这是usercall的特征。

二、参数的确定

即使我们hook了这个函数,但还是会时不时出问题。导致程序不稳定。
回到上图,看见那两个int了吗?按照道理,应该是push int; push int,但IDA优化成push __int64,当然会把栈用坏,所以寄掉。

以上是我实践中发现的问题,所以有时候不要太依赖IDA的F5,遇到问题多调试,多看汇编码把……


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

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//