M68k - IDA Pro 24位寻址?

时间:2015-06-22 18:22:37

标签: ida 68000

我正在尝试反汇编68000的BIOS映像,而我无法让IDA Pro 6.5正确地交叉引用地址。

对于那些不知道的人,摩托罗拉68000有一些与寻址有关的有趣特征/怪癖:

  1. 当给定16位绝对地址时,处理器在解除引用之前将其符号扩展为32位。
  2. 68K使用24位地址总线,因此忽略32位地址中的高字节。
  3. 此BIOS的原始作者在许多地方利用这些属性来节省几个字节:对于任何高于0xFF8000的地址,可以仅使用两个字节而不是四个来指定地址。例如,如果我想访问地址0xFF9134处的内存:

    lea (0x9134).w, a0
    < sign extension >
    lea (0xFFFF9134).l, a0
    < discard high byte >
    lea 0xFF9134, a0
    

    我遇到的问题是IDA Pro正在执行符号扩展,但后来考虑整个32位地址而不是低24位。 IDA最终试图交叉引用不存在(或至少不存在)的地址,并且我在0xFF8000-0xFFFFFF地址范围内的任何段/代码/数据都被完全忽略。

    我还是IDA Pro的新手,所以我不知道这是否可以用脚本解决,更不用说如何编写这样的东西了。有没有办法让反汇编程序正确处理这个脏/聪明的寻址技巧?

1 个答案:

答案 0 :(得分:1)

我有同样的问题。我的决定是创建custom_ana回调,然后将每个操作数地址更改为:op.add&amp; = 0xFFFFFF。 但这并不容易。因为此时您还没有完全识别的“cmd”,并且您必须使用自己的代码进行准备。