我正在尝试使用 Ghidra 拆卸一些 6502。以下(先决条件:POSIX 风格的 shell,Python 2.x)将生成一个名为的文件test.dat
,用于演示该问题:
python -c "open('test.dat','wb').write(''.join([chr(x) for x in [0xa2,0xa3,0xa9,0x00,0x9d,0x40,0x00,0xca,0x10,0xfa,0x60]]))"
然后,来自 Ghidra:
- 创建新项目(任何你喜欢的地方)
test.dat
上面创建的导入,语言为6502
/default
和Base Address
0x400- 双击
test.dat
在Active Project
去的CodeBrowser窗口 - 提供分析时说“不”
- 到 $400 位置按 D 拆卸
拆机时间很短。
//
// RAM
// fileOffset=0, length=11
// RAM: 0400-040a
//
0400 a2 a3 LDX #0xa3
0402 a9 00 LDA #0x0
LAB_0404 XREF[1]: 0408(j)
0404 9d 40 00 STA $0x40,X=>DAT_00e3 = ??
0407 ca DEX
0408 10 fa BPL LAB_0404
040a 60 RTS
这里的奇怪之处在于,它不是为$0040
表的基地址生成一个标签,而是为$00e3
访问的第一个字节生成一个标签,就好像 X 是一个 TOC 指针,或类似的,而 $0040 是偏移量。这不适用于 6502 代码。
在这个小例子中,我可以右键单击并手动修复引用,但我不介意承认我不想对整个程序执行此操作。6502 代码充满了这些东西。
我能阻止这种情况发生吗?
(我在尝试遵循提供的 Java 源代码时迷路了!-但我确实发现这种引用被称为扩展引用,并且似乎对所有目标都是通用的。我在文档中找不到任何内容但是,关于这些,或如何禁用它们。)