问题标签 [gdt]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
118 浏览

assembly - 如何在保护模式下更新数据段选择器

我想更新数据段选择器以指向 GDT 中的其他条目。但是由于我对汇编很陌生,所以我不能在我的代码中做到这一点。但是,我使用以下汇编指令更新了代码段选择器:

是否还有一些类似或替代指令来更新数据段选择器?

0 投票
2 回答
307 浏览

operating-system - GDT 使用的理论例子是什么?

我正在浏览 GDT。我可以了解数据结构的实现方式及其用途。

但是,我不明白 GDT 是如何使用的。CPU需要加载段的场景是什么?GDT是如何做到的?如果 GDT 涉及键盘驱动的中断,那将是一个很好的解释示例。

0 投票
1 回答
155 浏览

assembly - Bochs GDT 段限制以十六进制左移 3 次并添加 0xFFF。这是正常的吗?

我目前正在为我的引导加载程序设置 GDT。我有 3 (4) 段:

  • (零段)
  • 4GB 内核代码段
  • 4GB 内核数据段
  • 2GB 堆栈数据部分(我在截屏时忘记将 1 位设置为 0。稍后这将是 1mb)

这是我设置 GDT 的代码:

但是当我将二进制文件加载到 bochs 中时,它给了我以下结果: GDT 图像

字节完全按照我定义的方式加载到内存中: 记忆影像

在这里,我意识到每次都会将 0xFFF 添加到段中。这是因为我使用 4kb 作为粒度吗?

当我选择 0xFF 作为 4kb 粒度的大小时,这将扩展为 0xFFFFF,所以我只能使段 1mb - 1 字节大吗?

0 投票
1 回答
402 浏览

gcc - 为什么我的内联汇编代码会导致三重错误?

-masm=intel我使用带有选项的 GCC 编译我的代码。我的内核是由像 GRUB 这样的 Multiboot 加载程序加载的。

我想加载我的 GDT 的地址,然后我重新加载所有段寄存器,但这会导致三重错误(虚拟机重新启动)。如果我在本机程序集中(在 .asm 文件中)使用此代码,则该代码有效。

gdt.c:

这是我的 gdt.h:

我该怎么做才能让它工作?

0 投票
2 回答
487 浏览

assembly - 操作系统和程序集:是什么阻止用户模式将选择器设置为任意值?

我知道操作系统通过使用分段和特权级别来限制对内核代码和数据的访问。但是,用户可以更改段寄存器的值,如果以下代码执行成功,我们似乎可以访问内核数据:

所以我想知道阻止这段代码成功执行的机制是什么?

0 投票
1 回答
213 浏览

assembly - 如何调用 GDT?

我知道如何实现 GDT(全局描述符表)以及如何使用段寄存器和段描述符。但是如何/何时访问 GDT 条目?

是否在基本 mov 指令中访问,例如

这是否隐式调用 ds 段寄存器,然后访问 GDT 段描述符,还是有其他方式可以访问 GDT 条目?

0 投票
0 回答
125 浏览

x86 - 页表和GDT是一回事吗?

“页表”概念和 GDT 有什么区别?
两者是一样的吗?
还是 GDT 只是对页表概念的实现?

0 投票
1 回答
47 浏览

assembly - 如果在程序执行时更改 GDT 会发生什么?

如果在程序执行时更改 GDT 会发生什么?是否有任何物理寄存器或其他监视程序执行时 GDT 是否发生变化的东西?</p>

0 投票
0 回答
88 浏览

assembly - 64 位处理器中 NULL 选择器的混淆

对不起,我的英语不好。

在保护模式下,超出段限制将触发#GP。但是我在64位处理器(I7-3840,i5-3540)上有一个奇怪的问题:在实模式下初始化DS或ES为0,然后切换到保护模式,仍然使用实模式加载的描述符缓存值:(DS_base_address = 0, limit = 0xFFFF。)此时如果我通过DS或ES访问超过0xFFFF的内存,不会触发#GP。

代码片段

0 投票
1 回答
72 浏览

assembly - x86 处理器如何在引导加载程序加载 GDT 之后获取指令?

在为 x86 编写的典型简单引导加载程序中,我们有以下代码来加载 GDT 并执行远跳转(请注意,在执行以下代码之前 CS 为 0x0):

然而,就在lgdtCS 为空之后,指向 GDT 中的空描述符。所以 :

1.在GDT被加载后,CPU究竟如何才能获取正确的指令lgdt

2.远跳转到的代码段的DPL通常为0,做远跳转时CPU是否进行权限检查?