【发布时间】:2020-07-02 21:03:03
【问题描述】:
在为 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.在lgdt加载GDT之后,CPU究竟如何才能获取正确的指令?
2.远跳转到的代码段的DPL通常为0,做远跳转时CPU是否进行权限检查?
【问题讨论】:
标签: assembly x86 operating-system osdev gdt