为什么全局描述符表的第一个段描述符只包含零?

时间:2015-10-18 13:10:40

标签: assembly x86

在我看过的很多教程中,第一个段选择器只包含零,后跟代码和数据段,例如:

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段描述符的用途是什么?

1 个答案:

答案 0 :(得分:1)

英特尔手册325384-053U第3部分第3.4.2节段选择器表示任何通过段寄存器通过第0个描述符访问存储器的尝试都会导致异常:

  

处理器不使用GDT的第一个条目。一个段选择器,指向GDT的这个条目(即   是,索引为0且TI标志设置为0的段选择器用作“空段选择器”。   当段寄存器(CS或SS寄存器除外)加载空值时,不会产生异常   选择。但是,当使用包含空选择器的段寄存器进行访问时,它会生成异常   记忆。空选择器可用于初始化未使用的段寄存器。使用null加载CS或SS寄存器   段选择器导致生成一般保护异常(#GP)。

所以这似乎意味着无法正确使用它,因此你可以将它用于你想要的任何东西。

归零它只是最简单的事情,但可以使用任何值。