-
-
[原创]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,遇到问题多调试,多看汇编码把……
赞赏
他的文章
看原图
赞赏
雪币:
留言: