目前可以使用 Ghidra 来拆卸 Tandy Color Computer 二进制文件吗?6805 和 6809 操作码兼容吗?

逆向工程 拆卸 吉德拉 摩托罗拉
2021-06-13 23:00:01

我正在为 80 年代的微型计算机开发一些 Ghidra 加载器和文件系统模块。

我开始为 TRS-80 CoCo 的 .cas 磁带图像文件的 Loader 工作,因为 Ghidra 支持 6805 CPU。(它还支持 M68HC05TB 和 MC68HC908QY4)

我以前从来没有用过 CoCo 或任何带有 6809 的东西,所以不习惯它的说明。不过,我已经习惯了其他一些指令集。无论如何,我认为 6805 和 6809 对 CoCo 和 Dragon 32 二进制文件使用 Ghidra 会很有用。

但是当我将加载器模块准备好进行测试时,我发现它没有为 CoCo 的 ROM 生成与 Internet 上的反汇编相匹配的代码。许多字节根本无法解码为指令。

但是当我搜索 6805 时,我找不到说明指令集有很大不同的信息,尽管它们只是给人的印象是它应该与 6809 非常接近,而不是直接说出来。

那么我是否做出了错误的假设,我是否在 Ghidra 上混淆了一些东西,或者两个类似命名的芯片具有完全不同的指令集?如果设置正确,我是否可以使用 Ghidra 为这些 80 年代机器反汇编代码?

(我确定还有其他反汇编程序,但我只在这个项目中与 Ghidra 合作。)

1个回答

Ghidra 目前不支持 6809,并且还没有针对它的功能请求。

6805 和 6809 确实有相关的指令集和操作码,但在​​二进制级别上既不向前也不向后兼容。

特别是,6809 有两个前缀操作码:$10“page 1”和$11“page two”。这些在 6809 代码中很常见。

但在6805和许多在数量较少的操作码结束芯片$10$11用于其他指令。在 6805 上,$10BSET$11BCLR

似乎还有很多其他差​​异,但是并排的操作码列表并不容易找到。通常,两个芯片都有可变长度指令,其中一些相同的操作码用于不同长度的指令,因此任何尝试将一个工具用于一个芯片的二进制代码的另一个芯片都会很快失去同步。

守住新闻!

经过几个小时的研究,在发布这个答案大约一分钟后,我发现了一个令人困惑的发现:

根据GitHub上的Ghidra源码,2019年11月新增了6809支持,在6805支持目录下可以看到:

https://github.com/NationalSecurityAgency/ghidra/tree/master/Ghidra/Processors/6805/data/languages

6809.cspec    Support Motorola M6809  7 months ago  
6809.pspec    Support Motorola M6809  7 months ago  
6809.slaspec  GT-3483: fixed sleigh error in 6x09 language spec.  5 months ago

我使用的是 2020 年 2 月发布的 Ghidra 9.1.12 版,因此该功能应该存在。要么由于错误而丢失,要么我根本找不到使用它的方法。它不会出现在“语言”列表中,如果您选择 6805 作为语言,则没有相关选项。

我已经在 Ghidra 上提交了问题 #1958:https : //github.com/NationalSecurityAgency/ghidra/issues/1958