我试图反汇编原始Xbox的BIOS代码,但是我在设置涉及保护模式分段的外部参照时遇到了问题。例如,指令:
seg001:FFCE jmp large far ptr 8:0FFFFFE00h
段选择器8
引用具有段基0的GDT条目,因此结果地址应为0FFFFFE00h
,但IDA将其视为实模式段基;因此,它会使用无效的外部参照来解决0FFFFFE80h
,它位于指令的中间。
我已尝试手动输入说明,但之后我没有获得该地址的外部参照。我可以将选择器字节修补为零,但我希望有更好的方法。是否可以告诉IDA为给定的段选择器使用自定义基址?如果没有,是否有比修补更好的解决方法?
答案 0 :(得分:0)
在寻找一些IDC文件后,我找到了一个名为SetSelector
的函数,它设置了给定选择器的基址。所以,我需要做的就是在脚本中手动添加一个调用,将选择器0x8
的基础设置为0:
SetSelector(0x8, 0);