gdt相关内容

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

在为 x86 编写的典型简单引导加载程序中,我们有以下代码来加载 GDT 并执行远跳转(注意在执行以下代码之前 CS 为 0x0): lgdt gdtdesc移动 %cr0, %eaxorl $1, %eax移动 %eax, %cr0# 跳转到下一条指令,但在 32 位代码段中.# 将处理器切换到 32 位模式.ljmp $0x8, $protcseg.code32 # 汇编为 32 位模式程序 ..
发布时间:2022-01-11 23:41:05 其他开发

在长模式下更改 GDT 并更新 CS

我正在编写一个简单的自制 64 位操作系统,通过 UEFI 启动它.这意味着当我的代码开始执行时,它已经处于长模式,启用了分页. 现在,在退出 UEFI 引导服务后,我想用自己的控制结构替换 UEFI 构建的所有控制结构. 成功更改CR3(分页结构)的内容后,我使用lgdt成功加载了一个新的GDT. 现在的问题是,为了正确使用这个新的 GDT,我需要将一个新值移动到 CS 中.我 ..
发布时间:2021-11-25 07:14:18 C#

在长模式下更改 GDT 并更新 CS

我正在编写一个简单的自制 64 位操作系统,通过 UEFI 启动它.这意味着当我的代码开始执行时,它已经处于长模式,启用了分页. 现在,在退出 UEFI 引导服务后,我想用自己的控制结构替换 UEFI 构建的所有控制结构. 在成功更改 CR3(分页结构)的内容后,我使用 lgdt 成功加载了一个新的 GDT. 现在的问题是,为了正确使用这个新的 GDT,我需要将一个新值移动到 C ..
发布时间:2021-09-29 19:46:28 其他开发

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

在为 x86 编写的典型简单引导加载程序中,我们有以下代码来加载 GDT 并执行远跳转(注意,在执行以下代码之前,CS 为 0x0): lgdt gdtdescmovl %cr0, %eax或 $1, %eaxmovl %eax, %cr0# 跳转到下一条指令,但在 32 位代码段.# 将处理器切换到 32 位模式.ljmp $0x8, $protcseg.code32 # 汇编为 32 位模式 ..
发布时间:2021-06-12 20:36:34 其他开发

如何调用 GDT?

我知道如何实现 GDT(全局描述符表)以及段寄存器和段描述符的使用.但是,如何/何时访问 GDT 条目? 是否可以在基本的 mov 指令中访问,例如 mov [eax],ebx 这是否隐式调用 ds 段寄存器,然后访问 GDT 段描述符,或者是否有其他方式访问 GDT 条目? 解决方案 TL;DR : 全局描述符表 (GDT) 或局部描述符表 (LDT) 仅在 在保护模式或长模式 ..
发布时间:2021-06-02 19:29:49 其他开发

"D"代表什么?代表386的"D位"?

在 GDT上的文章中,OSDev Wiki描述了用作D位的标志. CS描述符如下: Sz :大小位.如果 0 ,则选择器定义16位保护模式.如果 1 ,则定义32位保护模式.您可以同时拥有16位和32位选择器. 另一个问题引用了英特尔手册:《英特尔64和IA-32架构软件开发人员手册》第3卷:《系统编程指南》 ,阅读: D/B(默认操作大小/默认堆栈指针大小和/或上限)标志 ..
发布时间:2020-09-13 00:53:44 其他开发

定义全局描述符表有什么用?

我阅读了有关GDT(全局描述符表)的教程,该教程将GDT定义为“定义了内存某些部分的基本访问特权的那个".这意味着GDT用于内存保护. 除上述以外,它还执行其他任何任务吗? 在操作系统中实施GDT是必须的吗? 简而言之,如果有人能够以一种易于理解的方式详细介绍GDT,那就更好了. 谢谢 解决方案 所有图像均来自 顾名思义, Global Descriptor Ta ..
发布时间:2020-04-25 11:22:59 其他开发

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

我想用gdb查看我的GDTR / LDTR / TTR和段寄存器 不可见部分(x86) 在gdb中输入“p / x $ gdtr”.... etc 但结果是“$ 6 =值无法转换为整数“ ,在gdb中输入”p / x $ cs“ 唯一的结果是CS,只是可见的部分 pre > 谁能告诉我如何查看这些值? 感谢您的回答 解决方案 如果GDB有这样一个函 ..
发布时间:2018-04-21 14:31:41 其他开发

远跳GDT的引导程序

flush_gdt: LGDT [GDTR] JMP 0x08的:complete_flushcomplete_flush: MOV AX,为0x10 MOV DS,AX MOV ES,AX MOV FS,斧 MOV GS,斧 MOV SS,AX RET 我无法理解这code做了什么。 flush_gdt 是一个标签还 ..
发布时间:2016-07-18 20:56:44 .NET Framework

如何在NASM组装进入32位保护模式?

我学习x86汇编,我试图做一个玩具的操作系统在NASM,但我不明白一些事情。 我做了一个引导程序被成功引导我的内核: 负载从包含的内核文件的软盘14个行业; 搜索标记这些部门的文件 kernel.feo ; 的文件到内存偏移为0x2000 负载; 执行使用远跳 JMP为0x2000内核:0×0000 所以,我必须位于内核code为0x2000:0 在记忆中。 CS 可能是正确的 ..
发布时间:2016-07-18 20:25:57 .NET Framework