目录
  1. 1. IDA中常见的堆栈不平衡问题及解决方法
    1. 1.1. 问题描述:
    2. 1.2. 问题原理
    3. 1.3. 解决方法
    4. 1.4. 额外问题
IDA中栈堆不平衡问题及解决方法

IDA中常见的堆栈不平衡问题及解决方法

问题描述:

  • 错误提示为:

    Decompilation failure:

    xxxxxx positive sp value has been found

    Please refer to the manual to find appropriate actions

    其中xxxxxx代表地址,也可以理解为造成堆栈不平衡的指针地址

问题原理

  • F5时出现上述错误,一般是程序代码有一些干扰代码,让IDA的反汇编分析出现错误。比如用push + n条指令 + retn来实际跳转,而IDA会以为retn是函数要结束,

解决方法

  • 首先,打开Options ,选择 General,然后把Stack pointer勾选上。(如果是汉化的ida,则应该打开“选项”,点击“常规”,在 “反汇编”中 把 “堆栈指针” 打勾)
  • 在“IDA-view-A”找到出问题的地址,可以看到函数变成红色,且无法F5反汇编。
  • 在其附近找到 “retn” 或者“retf” ,发现其前面的数字不为0,即堆栈不平衡
  • 找到出问题的函数,右键,点击“更改堆栈指针”(快捷键为Alt+K),输入对应的值,只需使“retn” 或“retf” 前面的值为0即可
  • 修改后即可正常F5反汇编

额外问题

由于是强行平衡堆栈,所以可能会冒出一系列问题,比如函数参数过多,代码变得奇怪等等

  • 可以通过在函数上按 Y 来修改传递的参数个数
  • 可以通过在汇编代码上,按 alt+p ,做出的函数的进一步调整
文章作者: Sakura式
文章链接: http://yoursite.com/2020/08/23/IDA%E4%B8%AD%E6%A0%88%E5%A0%86%E4%B8%8D%E5%B9%B3%E8%A1%A1%E9%97%AE%E9%A2%98%E5%8F%8A%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hexo
打赏
  • 微信
  • 支付寶