HexRays Failed
绝大多数出错的原因是与这个函数相关的某些参数设置错误。如这个函数中调用其他函数的调用约定出现错误,导致参数解析失败或调用前后栈不平衡
eg:
(1)_stdcall被误认为_cdecl:两个调用约定清理参数空间的方法不一样,导致跟踪栈指针时出现问题
(2)_thiscall被误认为_fastcall:函数会多出一个不存在的参数
(3)_fastcall被误认为_cdecl:两者参数个数都是1,反编译器无法找到栈上的参数,因为实际上是使用寄存器传参
call analysis failed
[逆向]寻找PE文件的main与winmain - 肖洋肖恩、 - 博客园 (cnblogs.com)
解决办法:
(1)IDA自动分析
定位到报错的代码位置,双击调用的函数,进入后按一次F5,再返回就可以F5了。
(2)修改参数个数
定位到报错的代码位置,鼠标点击调用的函数,按下Y键,修改参数个数。
比如将(_JNIEnv *, int, int, int, int, int, int, int);
改为(_JNIEnv *, int, int, int);
具体参数个数,需要根据函数调用约定及汇编代码确定(看它传入了几个参数)。
sp-analysis failed
当优化等级较高时,编译器将省略帧指针rbp的使用,转而使用rsp引用所有的局部变量。为了找到局部变量,IDA通过跟踪每条指令rsp的修改来查找并解析局部变量。但是IDA在跟踪rsp时出现了问题,导致反编译失败。
问题出现的根源:(1)某个函数调用的调用约定出错(2)该函数的参数个数出错
解决办法:
选择“Options——General”菜单命令,勾选”Stack pointer”
解决 IDA Pro sp 分析失败错误 |特拉维斯·马蒂森 (travismathison.com)
IDA sp-analysis failed - Startu - 博客园 (cnblogs.com)
IDA出现“sp-analysis failed”和F5无法反编译的解决方法_endp ; sp-analysis failed-CSDN博客