Operating system 如何验证GDT是否设置正确?

Operating system 如何验证GDT是否设置正确?,operating-system,interrupt,interrupt-handling,keyboardinterrupt,Operating System,Interrupt,Interrupt Handling,Keyboardinterrupt,我的操作系统的IDT和GDT不能作为一个整体工作。我不知道哪一个设置不正确。所以我可以验证GDT是否设置正确,这样我就可以找出哪里出了问题 我是用C语言编写的。我认为没有特定的代码来验证GDT,因为它是您自己设置的。你必须检查你的代码是否有bug,或者检查GDT本身是否有无效数据。我知道没有具体的方法。但这可能是一种间接的检查方法。这是因为我怀疑它是否被正确设置,因为在将指针地址从c传递到汇编等时可能会出错,即使gdt的数据是正确的。如果你不能用代码检查它,你会想到什么“间接方法”?不知道。那就

我的操作系统的IDT和GDT不能作为一个整体工作。我不知道哪一个设置不正确。所以我可以验证GDT是否设置正确,这样我就可以找出哪里出了问题


我是用C语言编写的。

我认为没有特定的代码来验证GDT,因为它是您自己设置的。你必须检查你的代码是否有bug,或者检查GDT本身是否有无效数据。我知道没有具体的方法。但这可能是一种间接的检查方法。这是因为我怀疑它是否被正确设置,因为在将指针地址从c传递到汇编等时可能会出错,即使gdt的数据是正确的。如果你不能用代码检查它,你会想到什么“间接方法”?不知道。那就是我请求帮助的地方。就像检查20行是否启用一样,我听说通过将引导签名与内存中某个位置的某个值(值超过1MB)后的某个值进行比较,就可以完成。所以我认为可能有这样间接的方法来验证。对于A20行:我认为没有特定的代码来验证GDT,因为您自己设置了它。你必须检查你的代码是否有bug,或者检查GDT本身是否有无效数据。我知道没有具体的方法。但这可能是一种间接的检查方法。这是因为我怀疑它是否被正确设置,因为在将指针地址从c传递到汇编等时可能会出错,即使gdt的数据是正确的。如果你不能用代码检查它,你会想到什么“间接方法”?不知道。那就是我请求帮助的地方。就像检查20行是否启用一样,我听说通过将引导签名与内存中某个位置的某个值(值超过1MB)后的某个值进行比较,就可以完成。所以我认为可能有这样的间接方法来验证。对于A20线: