在为 x86 编写的典型简单引导加载程序中,我们有以下代码来加载 GDT 并执行远跳转(请注意,在执行以下代码之前 CS 为 0x0):
lgdt gdtdesc
movl %cr0, %eax
orl $1, %eax
movl %eax, %cr0
# Jump to next instruction, but in 32-bit code segment.
# Switches processor into 32-bit mode.
ljmp $0x8, $protcseg
.code32 # Assemble for 32-bit mode
protcseg:
然而,就在lgdt
CS 为空之后,指向 GDT 中的空描述符。所以 :
1.在GDT被加载后,CPU究竟如何才能获取正确的指令lgdt
?
2.远跳转到的代码段的DPL通常为0,做远跳转时CPU是否进行权限检查?