很长一段时间以来,我一直在努力解决由 IDA HexRays 插件生成的一些似乎已损坏的功能。
一些反编译生成的纯 C 代码,显示为 ASM 代码:/
IE:
sqrt(v4);
__asm
{
fstp [esp+24h+var_C]
fld [esp+24h+var_C]
fstp [esp+24h+var_14]
fldz
}
这可能是什么原因?可能是错误的堆栈指针?我必须承认,有时我也会遇到一个著名的sp问题,我总是通过ALT + K调整负堆栈指针来修复和调整负堆栈指针,但是在我这样做之前,生成的 ASM 代码问题已经发生在某些函数中。
请注意,当我将相同的可执行文件加载到另一个 IDA 实例并转到相同的函数内存时,反编译的代码看起来不错,所以我猜测由于我的一个更改(可能是结构布局)使该功能失败?
有没有办法解决这个问题,这样生成的代码将再次看起来像普通的 C?我已经尝试undefine了损坏的函数并重新分析它,但输出代码仍将是 ASM。
提前致谢!