【问题标题】:Dissasemble 68xx code without entry point vector反汇编没有入口点向量的 68xx 代码
【发布时间】:2017-06-01 21:55:05
【问题描述】:

我正在尝试从包含 68xx(68hc12 类)微控制器的旧收音机中反汇编代码。问题是,我无法访问ROM顶部的micro的中断向量,所以我不知道从哪里开始看。我只有顶部下方的代码。有一些关于在哪里或如何在代码数据中找到有意义的例程的建议?

【问题讨论】:

  • 你怎么没有矢量区?您无法从 MCU 读取代码并且您的 S19 不完整?某些 HC11 可能具有覆盖矢量的内部 EEPROM。那么,你看过那里吗?
  • 它使用内部 EEPROM。它没有任何类型的外部ROM。该设备有在线可用的 ROM 升级,这是我获得固件进行评估的地方。我选择不尝试通过直接连接访问固件。
  • 您知道确切的零件编号吗?
  • 它是 CA6812。我不知道制造商,但它是 68hc 克隆。 JVC、飞利浦、松下,都靠中国厂商接力
  • 我用python脚本检测二进制的架构,结果是8051,反汇编后代码清晰漂亮。所以 CA6812 是 8051 的变种。

标签: 68hc12 68hc11


【解决方案1】:

如果不知道重置向量指向的位置,您将无法真正可靠地拆卸。但是,您可以做的是尝试通过消除所有其他不可能作为起点的地址来缩小可能的重置地址。

因此,鉴于内存映射中包含有效操作码的任何地址都是潜在的重置点,您需要消除它,或者保留它以供进一步分析。

对于 68HC11 情况,您可以通过查找具有合法操作数值的 LDS 指令(即,指向或靠近可用 RAM 的顶部——如果有多个 RAM 组,则指向其中任何一个)来尝试猜测入口点)。

如果您知道设备的完整内存映射(即,如果使用外部存储器、其映射和可能映射的外围设备(例如 LCD)),可能会有所帮助。你也知道CONFIG寄存器的内容吗?

LDS 指令通常要么是第一条指令,要么是其后的关闭指令(所以当你觉得你终于找到了你的复位地址时,回顾一些指令)。这里的问题是,某些数据可能会偶然显示为 LDS 指令,因此您最终可能会得到多个潜在有效的入口点。当然,其中只有一个是有效的。

您可以通过从这些 LDS 指令中的每一个开始反汇编一些指令来进一步消除,直到您遇到非法操作码(即显然不是有效的代码序列,而是看起来像操作码的意外数据排列),或者您看到一系列68HC11 初始化中常用的指令集。这些涉及(通常)初始化任何一个或多个寄存器 BPROT、OPTION、SCI、INIT(大部分为 103D,但部分为 3D)等。

您可以编写一个相对较小的脚本(例如,在 Lua 中)对内存映射进行基本扫描,并生成一组(希望很小的)潜在重置点,以便使用真正的反汇编程序进一步检查类似的提示我提到了。

现在,一旦您确定了复位向量,工作就会变得容易一些,但您仍然需要确定任何中断处理程序的位置。为此,您的提示是 RTI 指令以及通常应该确认它处理的特定中断的任何前面的代码。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2014-11-18
    • 1970-01-01
    • 2015-12-21
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 2018-03-21
    相关资源
    最近更新 更多