在我看过的很多教程中,第一个段选择器只包含零,后跟代码和数据段,例如:
lgdt gdt_descriptor
/* More code. */
gdt_start:
gdt_null:
.long 0x0
.long 0x0
/* More descriptors. */
gdt_end:
gdt_descriptor:
.word gdt_end - gdt_start
.long gdt_start
第一个gdt_null
段描述符的用途是什么?
答案 0 :(得分:1)
英特尔手册325384-053U第3部分第3.4.2节段选择器表示任何通过段寄存器通过第0个描述符访问存储器的尝试都会导致异常:
处理器不使用GDT的第一个条目。一个段选择器,指向GDT的这个条目(即 是,索引为0且TI标志设置为0的段选择器用作“空段选择器”。 当段寄存器(CS或SS寄存器除外)加载空值时,不会产生异常 选择。但是,当使用包含空选择器的段寄存器进行访问时,它会生成异常 记忆。空选择器可用于初始化未使用的段寄存器。使用null加载CS或SS寄存器 段选择器导致生成一般保护异常(#GP)。
所以这似乎意味着无法正确使用它,因此你可以将它用于你想要的任何东西。
归零它只是最简单的事情,但可以使用任何值。