在使用ida做逆向时发现main2函数底部出现:main2 endp ; sp-analysis failed,刚使用ida打开时main2函数还没有出现栈指针分析失败。估计在分析时不正确的修改致使ida对栈指针分析出错。图如下:
一个明显错误的地方就是0X00403C22到0X00403C27处,在调用了firstClass_Init函数(有一个参数)后,栈顶指针还是02C,没有变成028,解决办法:
1、在0X00403C22处点击02C栈顶,右键点击Change stack pointer…(快捷键Alt+K),修改成0X4,如下图:
修改之后此处显示正常。但是函数结束处依旧有:sp-analysis failed
2、选择编辑函数,把0X24修改成0X14,如下图:
此时依旧:sp-analysis failed
3、同第二步,只是要修改firstClass_Init函数,0x10。如下图:
sp-analysis failed在main2函数底部消失。
造成栈顶分析失败的原因有很多,这只是其中一种,并不能用来解决所有的栈顶分析失败。
更详细的原因可以参考《IDA Pro权威指南》第90页函数特性。
不止一次遇到栈指针分析错误的情况,总结以下几点:
1、确定本函数的栈大小、传入参数数量、是否保存寄存器,对本函数做响应修改
2、在本函数内部分析每一行的栈指针,看ida有没识别错误的,如果有识别错误的通过Alt+K修改过来