摘要: 所有内容均翻译自 Intel CPU 手册,再经过整理,难免有误,见谅。 32位分页模式:CR0.PE=1, CR0.PG=1, CR4.PAE=0 PAE分页模式:CR0.PE=1, CR0.PG=1, CR4.PAE=1, IA32_EFER.LME=0 4级分页模式:CR0.PE=1, CR0 阅读全文
posted @ 2021-10-31 19:47 HyperVS 阅读(125) 评论(0) 推荐(0)
摘要: 所有内容均翻译自 Intel CPU 手册,再经过整理,难免有误,见谅。 段描述符表是一个段描述符数组。最多可容纳8192(2^16 / 8)个8字节的描述符。分为GDT和LDT。GDT为整个软硬件系统服务,由操作系统定义,管理所有用户程序。 # 进入保护模式之前必须先定义GDT表。由于是在实模式下 阅读全文
posted @ 2021-10-31 19:41 HyperVS 阅读(189) 评论(0) 推荐(0)
摘要: 所有内容均翻译自 Intel CPU 手册,再经过整理,难免有误,见谅。 Type 是什么取决于S位。 S=1: - 当S=1,表示该段描述符是一个代码段描述符(高位=1)或者数据段描述符(高位=0)。 # 对于数据段,低三位是A(是否访问过)、W(是否可写)、E(扩展方向)。堆栈段属于数据段,必须 阅读全文
posted @ 2021-10-31 19:32 HyperVS 阅读(478) 评论(0) 推荐(0)
摘要: 所有内容均翻译自 Intel CPU 手册,再经过整理,难免有误,见谅。 段描述符是位于GDT或LDT中8字节的项,给处理器提供一个段的位置、界限、访问特权级等信息。 段描述符的结构: # G:粒度标志。Segment Limit 字段的大小比例。G=0,Segment Limit 以字节为单位;G 阅读全文
posted @ 2021-10-31 19:21 HyperVS 阅读(645) 评论(0) 推荐(1)
摘要: 所有内容均翻译自 Intel CPU 手册,再经过整理,难免有误,见谅。 通过段选择符可以找到某个段的段描述符。 段选择符的结构: # Index:在GDT或LDT中的位置索引。处理器将此索引乘以8,再加上GDTR或LDTR中的基址就可以找到对应的段描述符。# TI:表示描述符表。TI=0,GDT; 阅读全文
posted @ 2021-10-31 19:12 HyperVS 阅读(171) 评论(0) 推荐(0)
摘要: 所有内容均翻译自 Intel CPU 手册,再经过整理,难免有误,见谅。 CS,SS,DS,ES,FS,GS # 段寄存器分为可见部分和隐藏部分(描述符高速缓存器)。在保护模式下,当段选择符装载入段寄存器的可见部分的时候,处理器会从该段选择符指向的段描述符中,将段基址、段界限、访问权限装载入不可见部 阅读全文
posted @ 2021-10-31 19:06 HyperVS 阅读(300) 评论(0) 推荐(0)
摘要: 所有内容均翻译自 Intel CPU 手册,再经过整理,难免有误,见谅。 逻辑地址:段起始地址与偏移的组合。 线性地址:在没有开启分页机制的情况下,线性地址就是物理地址。 开启分页机制的情况下,处理器得到物理地址需要两步: 01. 通过逻辑地址找到线性地址: 02. 将线性地址转换为物理地址,例如: 阅读全文
posted @ 2021-10-31 18:57 HyperVS 阅读(328) 评论(0) 推荐(0)
摘要: 所有内容均翻译自 Intel CPU 手册,再经过整理,难免有误,见谅。 系统设计可以根据是否采用CPU提供的分段机制来分类:平坦模型和多段模型。 像Windows这些操作系统采用的是平坦模型。 平坦模型 - 对于基本平坦模型,操作系统和应用程序可以访问一个连续的、没有分段的地址空间。 - 实现基本 阅读全文
posted @ 2021-10-31 18:05 HyperVS 阅读(133) 评论(0) 推荐(0)
摘要: #include <windows.h> int main() { DWORD dwKernel32 = 0; _asm { mov eax, fs:[0x30] // peb mov eax, [eax+0x0C] // ldr mov eax, [eax+0x1C] // Module List 阅读全文
posted @ 2021-10-31 16:33 HyperVS 阅读(175) 评论(0) 推荐(0)