情况一:
有的时候IDA的函数点进去 ,发现无法去反编译,可能是代码出问题了,考察我们对汇编的阅读
能力例如下面:
aaa指令明显错误(注:CODE CREF代码交叉引用) 我们把这里jbe和aaa nop掉,有时nop后会出现新的代码,我们再把这些nop掉,直到之前有错误的代码部分部分全都nop掉。
然后再选中红色部分,按p键定义为函数,然后重新反编译即可
情况二:
// positive sp value has been detected, the output may be wrong!
这种一般是堆栈不平衡导致的,选择IDA的Options选项,然后把点击Generals,
把Stack pointer点上,然后去看汇编代码
这种绿色数字就是堆栈信息,一般情况下,突然中间出现负数,表示这里堆栈错误,选中上面一行按快捷键alt+k进行修改。
情况三:
部分指令无法被反编译
解决方案: 因为函数中间有未设置成指令的数据字节,按c设置为指令集科。
或者把黄色段的数据按c键转化为代码,再定义为函数,再反编译