IDA 中的保护模式分段
Protected-Mode Segmentation in IDA
我正在尝试反汇编初代 Xbox 的 BIOS 代码,但在设置涉及保护模式分段的外部参照时遇到了问题。例如指令:
seg001:FFCE jmp 大远指针 8:0FFFFFE00h
段选择器8
引用了一个段基数为0的GDT条目,所以结果地址应该是0FFFFFE00h
,但是IDA将它当作一个实模式段基数;结果,它以一个无效的 Xref 结束,指向地址 0FFFFFE80h
,它在一条指令的中间。
我试过手动输入指令,但没有得到地址的外部参照。我可以将选择器字节修补为零,但我希望有更好的方法。是否可以告诉 IDA 为给定的段选择器使用自定义基地址?如果没有,是否有比打补丁更好的解决方法?
在翻阅了一些 IDC 文件后,我发现了一个名为 SetSelector
的函数,它设置给定选择器的基地址。所以,我需要做的就是在脚本中手动添加一个调用,将选择器 0x8
的基数设置为 0:
SetSelector(0x8, 0);
我正在尝试反汇编初代 Xbox 的 BIOS 代码,但在设置涉及保护模式分段的外部参照时遇到了问题。例如指令:
seg001:FFCE jmp 大远指针 8:0FFFFFE00h
段选择器8
引用了一个段基数为0的GDT条目,所以结果地址应该是0FFFFFE00h
,但是IDA将它当作一个实模式段基数;结果,它以一个无效的 Xref 结束,指向地址 0FFFFFE80h
,它在一条指令的中间。
我试过手动输入指令,但没有得到地址的外部参照。我可以将选择器字节修补为零,但我希望有更好的方法。是否可以告诉 IDA 为给定的段选择器使用自定义基地址?如果没有,是否有比打补丁更好的解决方法?
在翻阅了一些 IDC 文件后,我发现了一个名为 SetSelector
的函数,它设置给定选择器的基地址。所以,我需要做的就是在脚本中手动添加一个调用,将选择器 0x8
的基数设置为 0:
SetSelector(0x8, 0);