dar*_*t97 2 x86 operating-system osdev i386 gdt
使用 初始化并将 GDT 加载到 GDTR 后lgdt,以后如何更新 GDT?
如果我使用sgdt命令获取基地址,然后更新或添加条目,然后使用 重新加载它,我是否正确lgdt?还有其他方法吗?
或者我是否遗漏了一些东西,并且 GDT 永远不会“意味着”在初始化和加载后进行更新?
我知道这个问题已经很老了,但是我想强调一些评论中没有提到的事情,那就是CPU缓存的内容和没有的内容。
\ncs, ds, es, fs, gs, ss, ldtr, tr) 分配有指定段描述符的段选择器。段选择器始终为 16 位,由以下部分组成:\ngdtr只是加载一个值gdtr(由GDT的基地址及其大小组成)mov es, ax,ax例如值为 0x0010:\ngdtr可能指向不同的位置,甚至是无效的位置,并且可能具有任何大小,同样,即使是无效的位置 - CPU 也不关心。mov ax, es. (ax变成0x0010,即使认为GDT段描述符可能包含任何内容或者目前可能不存在)资料来源:Intel\xc2\xae 64 和 IA-32 Architectures Software Developer\xe2\x80\x99s 手册第 3 卷:系统编程指南第 3 章:保护模式内存管理
\n我建议您也看看 wiki.osdev.org,特别是:
\n请询问任何澄清
\n