我目前正在为嵌入式设备反转固件二进制文件。该设备使用了一种不常见的架构:它是一种改进的哈佛架构,在TMS320C55x芯片组上运行,带有一个不再存在的旧实时操作系统 (RTOS) (Byte-BOS) 并且我找不到任何手册 (如果你有,请告诉我)。固件中不使用标准库。
根据从 Internet Archive 找到的一些罕见文档,RTOS 实际上是一个管理任务、内存分配和进程间消息传递的微内核。在内核中,似乎有两个函数可以管理内存:fmem_alloc和fmem_free。
我试图在固件文件中找到这些功能。我可以估计 RTOS 代码的位置,以及在该代码段中查找函数。我的目标是找到fmem_alloc和fmem_free函数和函数使用IDA调用它们。
由于我的目标是 TMS320C55x 体系结构,并且我有一个原始固件文件与一个整洁的COFF二进制文件,因此在没有实际仿真器的情况下进行调试非常困难,据我所知,对于该微处理器而言,仿真器仅基于硬件。因此,我似乎注定只能依赖静态分析。但是,如果有人知道调试原始固件的软件解决方案,我会非常感兴趣。该的Code Composer Studio IDE只调试COFF二进制文件。
在我可以搜索的特定距离内是否有任何技术或 C55x 指令集可以识别此功能?或者至少减少要搜索的潜在功能的数量?我知道 RTOS 使用双链表来管理堆。我首先想到使用该malloc函数作为潜在模板,但发现它与我所看到的相去甚远,即将英特尔组装到 C55x,尤其是考虑到冯诺依曼和哈佛架构之间的差异。
任何帮助表示赞赏。谢谢。
PS 由于保密条件,我无法发布产品详细信息、固件文件或反汇编代码。我知道因此可能很难提供可靠的答案。
更新
自从我上一篇博文以来,我已经识别出使用相同 RTOS 的旧希捷固件二进制文件,但对于英特尔 8096。顺便说一句,目标 RTOS 是一个名为 Byte-BOS RTOS 的旧微内核,我在这篇文章中写过。此操作系统中唯一可用的字符串是版权声明。但是使用 Seagate 固件,我可以看到与堆相关的错误消息。我可能会尝试将这些 8096 代码段转换为 C,然后在 TMS320C55x 上重新编译它们。
更新 2
所以我发现该平台的编译器/IDE 包含某种 C 库,其中包含一个简单的malloc()函数。我写了一个小的 C 程序,用它分配了一些内存,在包含的调试器中运行它并转储机器代码。我在 IDAPython 中创建了一个快速字节字符串搜索功能,并将非指令值替换为“????” 让 IDA 只查找说明。不幸的是,它没有发现malloc()功能。我怀疑代码完全依赖于 RTOS 提供的内存分配函数,而不是库中的函数。我简直不敢相信它们会大不相同,因为两者都依赖于链表。无论如何,这就是我的情况。我可能会尝试模糊字节字符串以从库中找到类似于malloc()函数的代码部分。