我可以在 IDA 中设置基本块的父级吗?

逆向工程 艾达
2021-06-15 07:18:17

我得到了一个函数,它的控制流有点乱……像这样:

在此处输入图片说明

如您所见,左上角的基本块没有连接任何东西;但是,如果我检查文本 disasm,这就是我看到的:

在此处输入图片说明

如您所见,IDA 认为调用永远不会返回,将中断的行放在那里,并且控制流被破坏(因为下一个基本块没有父块)。

有什么方法可以手动链接基本块,或者更好的是,让 IDA 不再相信调用没有返回?

编辑:该函数确实返回,并且不会破坏它使用的其余地方:

在此处输入图片说明

4个回答

下图是一个类似的案例(Ida V6.3):

在此处输入图片说明

带有相应的无用图形视图: 在此处输入图片说明

显然,艾达完全被打扰了。在这种情况下,对我有用的是以下简单程序:

  1. 取消定义函数和代码 => Ida 将只显示字节码
  2. 选择整个未定义区域并重新定义为代码(“C”键)
  3. 重新定义为函数。

生成的图形视图现在看起来不错: 在此处输入图片说明

这在这里有所帮助,但它可能不是所有类似情况下的补救措施。

备注:在这种特殊情况下,取消定义和重新定义函数而不取消定义代码也不起作用。

可以将函数定义为“返回”或“不返回”。

为此,您应该找到被调用的函数,右键单击它,选择“编辑函数”并取消标记“不返回”复选框。

嗯……你可以反过来做。试试这个:在应该从你说的那个调用语句连接的基本块的地址中,按Alt+F11(更改被调用者)并将地址放在调用语句所在的位置。

您可以尝试设置函数va的类型(使用热键 Y)。然后,如果没有效果,您可以尝试取消定义该函数,并重新定义该函数以强制 IDA 重新分析。

如果你有 HexRays 反编译器,你可以在这个函数中调用反编译器,然后点击进入函数va,然后返回到原来的函数。

以上是 IDA 强制启动分析的技巧。我已经在不同 CTF 的二进制文件上对它们进行了测试。在大多数情况下,它们都有效。

PS:对不起我的英语不好