在 IDA Pro 中复制外部库切换

逆向工程 艾达
2021-06-27 11:37:14

我正在对 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,为一块板上的组交换事物(DREG、DRAM、DROM)分配了基数 0x1000,并为板上的组交换事物分配了基数 0x2000其他板 (CROM)。这导致 (DREG, DRAM, DROM) 和 CROM 都具有虚拟地址范围 0xC000-0xFFFF,这是正确的。

我不知道如何手动或自动告诉 IDA 使用哪个银行/基地。每当它遇到对不同基数的引用时,它会将地址显示为一个问题,并用五位数字而不是四位数字(例如0E018h来呈现它,我找不到任何手动解析引用的方法。我通读了很少的官方文档,并尝试在谷歌上搜索各种相关术语,但无济于事。

理想情况下,我希望 IDA 能够识别银行选择寄存器并自动选择正确的段,就像它为具有本机段寄存器的处理器所做的那样。如果这是不可能的,手动指定每个参考的目标银行/基地是可以接受的。有人可以提供有关如何实现其中任何一个的指导,或者更一般地指导如何处理 IDA 中的外部银行转换?

编辑:我设置了段翻译以使所有段中的固定段都可用,现在从切换段到固定段的代码引用工作。从固定到切换的数据引用仍然无法解析。我猜测将一组或另一组切换段添加到固定段的翻译列表将使所有对切换范围的引用解析为该库,但我需要能够将一些解析为一个库,一些解析为另一个所以这不是解决方案。

编辑:我发现我可以使用“手动”选项,从右键菜单中更改jpcall操作数从如0E018h1E018h,从而手动选择的银行。这确实使链接解析,但它似乎更像是一个黑客而不是一个正确的解决方案,因为 IDA 不像通常那样在呼叫站点显示名称和可重复的评论。

0个回答
没有发现任何回复~