x86如何在已加载后更改gdt?

时间:2014-08-25 07:25:33

标签: assembly x86 nasm gdt

我的idtr地址定义为

gdt_pointer:
    DW 0;size_of_gdt
    DD 0;start_of_gdt

我可以使用LGDT [gdt_pointer]加载它。 但是如果必须的话,我怎样才能改变gdt的内容呢? 设置正确的值后,我可以再次使用LGDT指令吗?

编辑: 我计划一直保持我的gdt_pointer起始地址相同,但我将改变size参数。我也是从32位保护模式加载和更改gdt。

1 个答案:

答案 0 :(得分:1)

如果更改GDT的内容(但保留在同一地址),则只需加载受更改影响的段寄存器(如果有)。

如果更改GDT的(虚拟)地址(但保留其内容相同),则只需再次执行lgdt

如果您同时更改了GDT的(虚拟)地址及其内容,则您需要执行lgdt并加载任何受影响的段寄存器。