我对IDA Pro 7.0中的嵌入式Z80应用程序进行了反向工程。目标系统将一个地址范围映射到一对扩展板中的任何一个。地址解码逻辑根据内存映射寄存器中的一位来决定要映射的板。我想我已经弄清楚了如何映射这些细分,但是却想不出如何让IDA使用银行转换区域。

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中处理外部银行转换的指导吗?编辑:我设置了句段转换,以使固定句段可用于所有句段,现在从切换的句段到固定句段的代码引用起作用。从固定到交换的数据引用仍然无法解析。我猜想将一组或另一组切换片段添加到固定片段的翻译列表中会使对切换范围的所有引用都解析为该库,但是我需要能够将一些解析为一个库,而某些解析为

编辑:我发现我可以从右键单击菜单中使用“手动”选项来将jpcall操作数更改为例如0E018h1E018h,从而手动选择存储库。确实可以解决链接问题,但它似乎更像是一种黑客手段,而不是适当的解决方案,因为IDA不会像通常那样在呼叫站点显示名称和可重复的注释。