问题标签 [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 投票
2 回答
1244 浏览

assembly - 我无法将 cpu 从实模式切换到保护模式

我是根据 Nick Blundell 的一本书来做的。我写了一个MBR程序,它首先在实模式下运行,程序中的一些指令会将cpu切换到保护模式。首先,我这样设置 GDT:

然后cpu运行以下指令:

该指令jmp CODE_SEG:init_pm将导致cpu崩溃并重新启动。如果我将其更改为jmp init_pm,则以下指令mov ax,10将导致 cpu 崩溃并重新启动。而且书上说切换操作需要跳远。

你能帮我做切换操作吗?

0 投票
0 回答
606 浏览

gdb - gs的虚拟地址:0x14

如果我们用 gcc 编译一些 C 代码,我们经常会看到以下汇编结果

这是一个简单的函数序言。从 +19 行,我们可以看到堆栈保护器的值是从 gs:0x14 获得的。我的问题是,我可以用 gdb 知道 gs:0x14 的实际虚拟地址吗?gs 段选择器值表示与 GDT 的偏移量,但是,用户级进程(如 gdb)无法访问 GDT 信息。如何使用 gdb 或其他调试器找出 gs 段的基地址?这是不可能的吗?

先感谢您。

0 投票
0 回答
362 浏览

assembly - 了解引导加载程序代码以设置 A20 门

好的,我只是试图理解有助于访问 1Mb 以上内存的代码。我正在下面写所需的代码段。我会写我理解的,我只需要确认我理解的是否正确(我是自学操作系统)。提前致谢

seta20.1首先,我们从键盘控制器 (mkbc) 获取状态,以检查是否可以向其写入内容。一旦它是空闲的,我们就会写入0xd1它,它会进入它的缓冲区,最终将输出端口设置为 write 。

我们seta20.1首先检查 mkbc 是否已读取并设置输出端口。完成后,我们发送0xdf将设置 A20 门的数据,这最终将允许我们访问 1Mb 以上的内存。

我的理解对吗?如果不是,请在正确的地方纠正我。

0 投票
1 回答
5015 浏览

assembly - 引导加载程序中的 gdt 远跳

我无法理解这段代码的作用。flush_gdt是一个标签没问题,然后将指针lgdt [gdtr]加载到寄存器中,然后从.48-bitgdtrjmp 0x08:complet_flush

jmp 指令有什么作用?然后为什么我们将 0x10 移动到 ax 然后再移动到其他寄存器

0 投票
1 回答
69 浏览

kernel - CPU是否忽略了gdt段?

我正在研究内核开发。使用一本书,我已经明白了。但是,我无法真正理解全局描述符表的影响。我的 GDT 如下:

加载gdt并将DATA_SEG分配给ds、ss、es、fs、gs寄存器后;我的汇编代码跳转到 c 代码。数据段基地址为 0x00000000,限制为 0xffff。不应该给 0x100000 内存地址赋值吗?

谢谢

0 投票
1 回答
301 浏览

assembly - x86 How to change gdt after it has been already loaded?

I have my idtr addressing defined as

and I can load it with LGDT [gdt_pointer]. But how can I change the contents of gdt later if I have to? Can I use the LGDT instruction again after setting the proper values?

EDIT: I'm planning to keep my gdt_pointer start address same all the time, but I'll be changing the size parameter. Also I'm loading and changing the gdt from 32 bit protected mode.

0 投票
1 回答
2013 浏览

assembly - x86 中断服务程序导致一般保护错误

我的通用 isr 存根定义为:

每次中断都会调用此代码,如下所示:

这段代码适当地调用了外部处理方法,但是从外部处理方法返回后导致gpf中断。

此外,我已将我的 gdt 映射为使用 0 特权级数据和代码描述符(和空描述符)覆盖整个 4G 地址空间。任何帮助表示赞赏。

0 投票
2 回答
3251 浏览

assembly - GDT 的粒度位在寻址内存方面到底有什么变化?

如果该位为零,那么内存是逐字节寻址的吗?如果它是 1,那么内存是 4Kb x 4Kb 寻址的吗?

例如,如果该位设置为 0,并且我寻址内存位置 a000h,那么我将寻址该位置的字节,对吗?如果我寻址下一个位置 a001h,那么那将是内存中的下一个字节,对吗?

但是如果这个位是 1,我会寻址 4Kb 块吗?

那么寻址a000h会给我一个4Kb的块,而a001是内存中的下一个4Kb吗?

0 投票
1 回答
3507 浏览

assembly - 我可以在 gdb 下打印 gdtr 和 gdt 描述符吗?

不可见部分(x86),所以在 gdb 中我输入“p/x $gdtr”....等,但结果是“$6 = 值不能转换为整数”,在 gdb 中我输入“p/x $cs”唯一的结果是 CS,只是可见的部分

感谢您的回答

0 投票
1 回答
455 浏览

x86 - 在 GDT/LDT/IDT 输入上设置断点

我正在研究 x86 架构,我想在全局描述符表条目或解释描述符表条目或 ldt 上设置一个断点 - 这意味着,例如,每次从 idt/gdt/ldt 读取特定条目时将触发断点。

我正在尝试使用 bochs x86 模拟器来模拟这种情况,但是我很难做到。

谢谢。