gpt4 book ai didi

ida - M68k - IDA Pro 24 位寻址?

转载 作者:行者123 更新时间:2023-12-01 19:06:40 24 4
gpt4 key购买 nike

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

对于那些不知道的人来说,摩托罗拉 68000 有一些与寻址相关的有趣功能/怪癖:

  1. 当给定 16 位绝对地址时,处理器会在取消引用之前将其符号扩展为 32 位。
  2. 68K 使用 24 位地址总线,因此 32 位地址中的高字节将被忽略。

该 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 还很陌生,所以我不知道这是否可以用脚本来解决,更不用说如何编写这样的东西了。有没有办法让反汇编器正确处理这个脏/聪明的寻址技巧?

最佳答案

我也有同样的问题。我的决定是创建 custom_ana 回调,然后更改每个操作数地址,如下所示:op.add &= 0xFFFFFF。但这并不那么容易。因为此时你还没有完全识别“cmd”,你必须通过自己的代码来准备它。

关于ida - M68k - IDA Pro 24 位寻址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30987128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com