分支发生在 IDApro

逆向工程 艾达 拆卸 固件
2021-07-04 07:13:37

最近我在 TMS320C6xx Arch 上工作,当我反转这个固件时,我看到函数图节点是分开的。我已经显示在下面:

所有这些节点都属于一个功能

如您所见,BRANCH OCCURS写在每个节点的末尾。我想这就是分离的原因。
1- 我该如何解决这个问题?
2-有什么问题?可能的话解释一下

提前致谢。

2个回答

没有问题,评论只是提供信息。

TMS320C6 是一款 DSP,与许多 DSP 一样,该架构针对快速数据处理进行了优化。尤其是它的流水线很深,分支不是一两个,而是多达五个 延迟槽您可以看到在B .S2X A3指令之后的注释“BRANCH OCCURS”之前还有其他五个指令(在一种情况下,第五条指令是并行/双指令,由||符号表示)。所有这些指令都在目标(A3 寄存器值)处开始执行之前执行。

由于寄存器理论上可以具有任何值,因此与其他情况不同,IDA 没有打印目标地址。

顺便说一句,我建议在文本(平面)模式下查看该处理器的反汇编,因为图形在具有如此深的延迟槽的情况下可能并不总是很好看。

添加到伊戈尔的优秀答复。不幸的是,IDA Pro 到目前为止还不能正确处理 TMS320C6。TI DSP 调用的常见模式是将调用地址加载到 32 位寄存器中并进行寄存器分支(它也具有立即偏移的直接分支,但编译器似乎仅将它用于函数内的本地分支)。IDA 似乎只处理直接分支而不是寄存器调用。还有许多其他问题(例如 IDA 无法正确处理 ADDKPC 或无法与 TI 生成的大端格式的 COFF 文件正常工作)。

我在使用 TI DSP 倒车柯达相机固件并为 IDA TMS320C6 CPU 模块编写补丁时遇到了这个问题 - 请参阅此处https://github.com/Alexey-Danilchenko/Kodak-DCS-Tools/tree/master/sources /IDA/DSP/处理器

这在 CPU 分析阶段仍然不完美,因此 Github 存档也有插件来执行 MVK/MVKH 命令中的函数调用发现和替换)以及 DP 偏移替换。