我正在尝试反汇编68000的BIOS映像,而我无法让IDA Pro 6.5正确地交叉引用地址。
对于那些不知道的人,摩托罗拉68000有一些与寻址有关的有趣特征/怪癖:
此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的新手,所以我不知道这是否可以用脚本解决,更不用说如何编写这样的东西了。有没有办法让反汇编程序正确处理这个脏/聪明的寻址技巧?
答案 0 :(得分:1)
我有同样的问题。我的决定是创建custom_ana回调,然后将每个操作数地址更改为:op.add&amp; = 0xFFFFFF。 但这并不容易。因为此时您还没有完全识别的“cmd”,并且您必须使用自己的代码进行准备。