某些函数在使用 f5 进行反编译时,会提示错误 “sp-analysis failed”,导致无法正确反编译。原因可能是在代码执行中的 pop、push 操作不匹配,导致解析的时候 esp 发生错误。
解决办法步骤如下:
- 用 Option->General->Disassembly, 将选项 Stack pointer 打钩
- 仔细观察每条 call sub_xxxxxx 前后的堆栈指针是否平衡
- 有时还要看被调用的 sub_xxxxxx 内部的堆栈情况,主要是看入栈的参数与 ret xx 是否匹配
- 注意观察 jmp 指令前后的堆栈是否有变化
- 有时用 Edit->Functions->Edit function…,然后点击 OK 刷一下函数定义