分支发生在 IDApro
逆向工程
艾达
拆卸
固件
2021-07-04 07:13:37
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 偏移替换。
其它你可能感兴趣的问题