Segment Start End Base
ROM1 00000 02000 0000
ROM2 02000 04000 0000
ROM3 04000 06000 0000
ROM4 06000 08000 0000
ROM5 08000 0A000 0000
IO 0A000 0B000 0000
RAM 0B000 0C000 0000
DREG 1C000 1D000 1000
DRAM 1D000 1E000 1000
DROM 1E000 20000 1000
CROM 2C000 30000 2000
我为始终映射的对象(ROM1-5,IO,RAM)分配了0x0000的基数,为一块板上的银行交换对象分配了0x1000的基数( DREG,DRAM,DROM)和以0x2000为基数的另一块板上的银行交换物(CROM)。这导致(DREG,DRAM,DROM)和CROM都具有虚拟地址范围0xC000-0xFFFF,这是正确的。
我不知道如何告诉IDA使用哪个库/库。 ,手动或自动。每当遇到不同基准的引用时,它都会将地址显示为问题,并用五位数字而不是四位数字来呈现它(例如
0E018h
),我找不到任何手动解析引用的方法。我已经通读了很少的正式文档,并且尝试使用各种相关术语进行了搜索,但都无济于事。它对具有本机段寄存器的处理器的处理方式。如果不可能,则可以为每个参考手动指定目标库/库。有人可以提供关于如何实现这些目标的指导,或者更一般地说,如何在IDA中处理外部银行转换的指导吗?编辑:我设置了句段转换,以使固定句段可用于所有句段,现在从切换的句段到固定句段的代码引用起作用。从固定到交换的数据引用仍然无法解析。我猜想将一组或另一组切换片段添加到固定片段的翻译列表中会使对切换范围的所有引用都解析为该库,但是我需要能够将一些解析为一个库,而某些解析为编辑:我发现我可以从右键单击菜单中使用“手动”选项来将
jp
或call
操作数更改为例如0E018h
至1E018h
,从而手动选择存储库。确实可以解决链接问题,但它似乎更像是一种黑客手段,而不是适当的解决方案,因为IDA不会像通常那样在呼叫站点显示名称和可重复的注释。