我得到了一个函数,它的控制流有点儿搞砸了...像这样:任何东西但是,如果我检查文本不一致,这就是我看到的内容:



如您所见,IDA认为该呼叫永远不会返回,那里的行不连续,控制流中断了(因为下一个基本块没有父级)。

有什么方法可以手动链接基本块,或者更好的方法是使IDA停止

编辑:
函数会返回,并且不会中断使用的其他位置:



评论

您能尝试重新分析程序吗?在选项->常规->分析->重新分析程序

你知道了吗?

@Krypton自己还没有完成,但听说可以使用cpp SDK完成

#1 楼

下图显示了类似的情况(Ida V6.3):

并带有相应的无用图形视图:在这种情况下,对我有用的是以下简单过程:

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

现在生成的图形视图看起来很不错:在所有类似的情况下都是一种补救措施。
备注:在这种特殊情况下,在未取消定义代码的情况下取消定义和重新定义函数也无法正常工作。

#2 楼

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

要执行此操作,应找到被调用的函数,右键单击它,选择“编辑函数”,然后取消标记“不返回”复选框。

评论


抱歉,我忘了添加,但是该功能未标记为“不返回”。我编辑了顺便说一句

–rev
15年8月29日在14:31

可能是不返回函数调用的函数之一吗?

– w s
15年8月29日在14:36

但是该函数确实会返回,它只是一个类似于printf的函数,它会返回指向格式化字符串的指针,而不是将其打印到stdout,所以我真的可以肯定它不会是“不返回”

–rev
15年8月29日在14:38

如果可能,我很高兴看到二进制文件。真的很奇怪

– w s
15年8月29日在14:53

顺便说一句,如果您用nops打这个电话,您会得到一些有趣的东西吗?

– w s
15年8月29日在15:07

#3 楼

嗯...你可以反过来做。尝试以下操作:在您说的那个调用语句应连接的基本块的地址中,按Alt + F11(更改被呼叫者),然后将该地址放在调用语句所在的位置。

#4 楼

您可以尝试设置函数va的类型(使用热键Y)。然后,如果那没有效果,则可以尝试取消定义该函数,然后重新定义该函数以强制IDA重新分析。然后单击功能va,然后返回原始功能。

上面是IDA强制启动分析的技巧。
我已经在不同CTF的二进制文件上对其进行了测试。

附言:对不起我的英语不好