在 Radare 的新版本中,我得到了
Missing cjmp bb in predecessor at 0x1006aa416
这是什么意思?我在这里提交了一个错误。但是,它的回答是
感谢您的报告,但这是一个警告,而不是由分析二进制文件中的跳转表引起的错误。
出现此警告的原因是什么?
在 Radare 的新版本中,我得到了
Missing cjmp bb in predecessor at 0x1006aa416
这是什么意思?我在这里提交了一个错误。但是,它的回答是
感谢您的报告,但这是一个警告,而不是由分析二进制文件中的跳转表引起的错误。
出现此警告的原因是什么?
bb指基本块,它是一个没有分支的指令序列(可能在末尾除外),对应于控制流图(CFG)中的节点,CFG是程序分析中常用的一种结构。
cjmp显然是条件跳转。显然,分析代码没有找到预期的模式,并警告您结果可能因此不太好。
如果我们查看源代码中的消息,我们可以在注释中看到“解密”消息:
// predecessor must be a conditional jump
这段代码似乎在分析跳转表的模式,这是反汇编程序中的一个常见问题,因为它们经常将数据与代码混合在一起,并且需要被识别以进行正确的反汇编。当前的分析器似乎期望特定模式(很可能是 Linux/GCC 生成的文件中存在的模式),但您的文件使用的指令序列与其预期不符。有以下几种可能:
该指令不是用于表跳转而是用于其他内容(例如函数指针调用)。在这种情况下,您可能可以忽略警告。
这是一个表格跳转,但由于某种原因,代码无法识别它。如果您发现它妨碍了正确的分析,您可以尝试自己修复代码或提交功能请求。
有趣的是,我看着所讨论的地址,显然有在前身块一个条件跳转,因此有可能在代码的一些其他部分(例如基本块分析)一些细微的缺陷,防止它使匹配。