我的idtr地址定义为
gdt_pointer:
DW 0;size_of_gdt
DD 0;start_of_gdt
我可以使用LGDT [gdt_pointer]
加载它。
但是如果必须的话,我怎样才能改变gdt的内容呢?
设置正确的值后,我可以再次使用LGDT
指令吗?
编辑: 我计划一直保持我的gdt_pointer起始地址相同,但我将改变size参数。我也是从32位保护模式加载和更改gdt。
答案 0 :(得分:1)
如果更改GDT的内容(但保留在同一地址),则只需加载受更改影响的段寄存器(如果有)。
如果更改GDT的(虚拟)地址(但保留其内容相同),则只需再次执行lgdt
。
如果您同时更改了GDT的(虚拟)地址及其内容,则您需要执行lgdt
并加载任何受影响的段寄存器。