栈指针平衡

当我们在静态分析时,想用F5查看伪代码是,结构会出现一个warring

positive sp value has been found

每条语句前的栈指针是这条语句未执行的栈指针。我们在IDA中使用Ait+K就可以修改栈指针

为什么会产生栈指针不平衡呢?这可能就是IDA的一个漏洞吧,但是又无可避免。在IDA官网上有这么一段解释:

IDA有栈跟踪的功能,它在函数内部遇到ret(retn)指令时会做判断:栈指针的值在函数的开头/结尾是否一致,如果不一致就会在函数的结尾标注”sp-analysis failed”。一般编程中,不同的函数调用约定(如stdcall&_cdcel call)可能会出现这种情况;另外,为了实现代码保护而加入代码混淆(特指用push/push+ret实现函数调用)技术也会出现这种情况。