EPT PTE 结构体解析

作成日: 2024年12月22日

使用モデル O1 by Chat01

質問

23h2 的 pte64 和 32 的结构体、英特尔的 ept_pte、ept_plm4e、ept_ptpte、ept_pde的结构体

图片一

typedef union _EPT_PTE
{
struct
{
ULONGLONG Read : 1;
ULONGLONG Write : 1;
ULONGLONG Execute : 1;
ULONGLONG MemoryType : 3;
ULONGLONG IgnorePAT : 1;
ULONGLONG Ignored0 : 1;
ULONGLONG Accessed : 1;
ULONGLONG Dirty : 1;
ULONGLONG UserExecute : 1;
ULONGLONG Ignored1 : 1;
ULONGLONG PageFrameNumber : 40;
ULONGLONG Ignored2 : 5;
ULONGLONG VerifyGuestPaging : 1;
ULONGLONG PagingWriteAccess : 1;
ULONGLONG Ignored3 : 1;
ULONGLONG SupervisorShadowStack : 1;
ULONGLONG SubPageWritePermissions : 1;
ULONGLONG Ignored4 : 1;
ULONGLONG SuppressVE : 1;
};
};


图片二
typedef union _IA32_VMX_BASIC_MSR {
struct {
unsigned RevId : 31;
unsigned Always0 : 1;
unsigned szVmxOnRegion : 13;
unsigned Reserved1 : 3;
unsigned PhysicalWidth : 1;
unsigned DualMonitor : 1;
unsigned MemoryType : 4;
unsigned VmExitInformation : 1;
unsigned VMXControlsClearable : 1;
unsigned VmEntryException : 1;
unsigned Reserved2 : 7;
};
ULONGLONG QuadPart;
} IA32_VMX_BASIC_MSR;

typedef union _IA32_FEATURE_CONTROL_MSR {
struct {
unsigned Lock : 1;
};
}

思考

查看结构体细节

我正在分析23H2的 PTE64 和 32 社飞机结构体,同时详细探讨了英特尔的 ept_pte, ept_plm4e, ept_ptpte, ept_pde结构体。代码片段中提到了一些联合体结构。

解析结构定义

我正在解释23H2的 pte64 和 pte32 结构体,同时提供英特尔的 ept_pte, ept_plm4e, ept_ptpte, ept_pde结构体定义,并探讨它们在 EPT 的应用。

预测代码需求

目前,我手头有点信息。我可能无法访问专有代码,但能提供标准定义并解释它们的应用。用户可能需要 C 语言结构体定义。

解释结构体定义

我正在解释Windows 23H2中64位和32位PTE的结构体定义。PTE64包括存在、读写、用户监督等字段,PTE32则有类似字段。

探讨EPT结构体

我正在研究英特尔 EPT 的相关结构体,涵盖 EPT_PTE, EPT_PDE, EPT_PLM4E 和 EPT_PTPTE。每个结构体都包括读取、写入、执行属性和页面框架号码等字段。

探讨MSR结构

我正在介绍两个MSR结构体,IA32_VMX_BASIC_MSR和IA32_FEATURE_CONTROL_MSR。前者用于获取VMX基本信息,后者用于控制和锁定VMX功能。

思考,持续 14 秒

回答

您好!您询问的是关于 Windows 23H2 版本中 64 位和 32 位页面表项(PTE)的结构体,以及英特尔的扩展页表(EPT,Extended Page Tables)相关结构体(如 EPT_PTEEPT_PLM4EEPT_PTPTEEPT_PDE)的定义。以下内容将详细介绍这些结构体的定义及其用途。

1. Windows 23H2 的 PTE64 和 PTE32 结构体

1.1 PTE64 结构体

在 64 位 Windows 操作系统中,页面表项(PTE)通常使用 64 位结构。以下是一个典型的 PTE64 结构体定义:

c
typedef union _PTE64 { struct { ULONGLONG Present : 1; // 页面存在位 ULONGLONG ReadWrite : 1; // 读/写权限 ULONGLONG UserSupervisor : 1; // 用户/内核模式 ULONGLONG PageWriteThrough: 1; // 写通缓存控制 ULONGLONG PageCacheDisable: 1; // 缓存禁用 ULONGLONG Accessed : 1; // 访问位 ULONGLONG Dirty : 1; // 脏位 ULONGLONG LargePage : 1; // 大页标志 ULONGLONG Global : 1; // 全局页 ULONGLONG Available : 3; // 可用位 ULONGLONG PageFrameNumber : 40; // 页框号 ULONGLONG Reserved : 11; // 保留 ULONGLONG ProtectionKey : 4; // 保护键 ULONGLONG NoExecute : 1; // 禁止执行 }; ULONGLONG Value; // 整个 PTE 的值 } PTE64, *PPTE64;

1.2 PTE32 结构体

在 32 位 Windows 操作系统中,页面表项(PTE)通常使用 32 位结构。以下是一个典型的 PTE32 结构体定义:

c
typedef union _PTE32 { struct { ULONG Present : 1; // 页面存在位 ULONG ReadWrite : 1; // 读/写权限 ULONG UserSupervisor : 1; // 用户/内核模式 ULONG PageWriteThrough: 1; // 写通缓存控制 ULONG PageCacheDisable: 1; // 缓存禁用 ULONG Accessed : 1; // 访问位 ULONG Dirty : 1; // 脏位 ULONG LargePage : 1; // 大页标志 ULONG Global : 1; // 全局页 ULONG Available : 3; // 可用位 ULONG PageFrameNumber : 20; // 页框号 }; ULONG Value; // 整个 PTE 的值 } PTE32, *PPTE32;

2. 英特尔的 EPT 相关结构体

英特尔的 EPT(Extended Page Tables)是硬件辅助虚拟化技术的一部分,用于优化虚拟机的内存管理。以下是一些主要的 EPT 相关结构体定义:

2.1 EPT_PTE 结构体

EPT_PTE 表示 EPT 中的页表项,用于描述虚拟机的页表条目。以下是其定义:

c
typedef union _EPT_PTE { struct { ULONGLONG Read : 1; // 读权限 ULONGLONG Write : 1; // 写权限 ULONGLONG Execute : 1; // 执行权限 ULONGLONG MemoryType : 3; // 内存类型(如 UC, WC, etc.) ULONGLONG IgnorePAT : 1; // 忽略 PAT ULONGLONG Ignored0 : 1; // 保留 ULONGLONG Accessed : 1; // 访问位 ULONGLONG Dirty : 1; // 脏位 ULONGLONG UserExecute : 1; // 用户执行权限 ULONGLONG Ignored1 : 1; // 保留 ULONGLONG PageFrameNumber : 40; // 页框号 ULONGLONG Ignored2 : 5; // 保留 ULONGLONG VerifyGuestPaging : 1; // 验证客户页 ULONGLONG PagingWriteAccess : 1; // 分页写访问 ULONGLONG Ignored3 : 1; // 保留 ULONGLONG SupervisorShadowStack : 1; // 管理员阴影栈 ULONGLONG SubPageWritePermissions : 1; // 子页写权限 ULONGLONG Ignored4 : 1; // 保留 ULONGLONG SuppressVE : 1; // 抑制虚拟化扩展 }; ULONGLONG Value; // 整个 EPT PTE 的值 } EPT_PTE, *PEPT_PTE;

2.2 EPT_PDE 结构体

EPT_PDE 表示 EPT 中的页目录项,用于描述虚拟机的页目录条目。以下是其定义:

c
typedef union _EPT_PDE { struct { ULONGLONG Read : 1; // 读权限 ULONGLONG Write : 1; // 写权限 ULONGLONG Execute : 1; // 执行权限 ULONGLONG MemoryType : 3; // 内存类型 ULONGLONG IgnorePAT : 1; // 忽略 PAT ULONGLONG Ignored0 : 1; // 保留 ULONGLONG Accessed : 1; // 访问位 ULONGLONG Reserved1 : 1; // 保留 ULONGLONG PageFrameNumber : 40; // 页框号 ULONGLONG Ignored1 : 11; // 保留 ULONGLONG ExecuteForUser : 1; // 用户执行权限 }; ULONGLONG Value; // 整个 EPT PDE 的值 } EPT_PDE, *PEPT_PDE;

2.3 EPT_PLM4E 结构体

EPT_PLM4E 可能是特定层级的 EPT 页目录项,具体取决于 EPT 结构的实现。以下是一个假设的定义:

c
typedef union _EPT_PLM4E { struct { ULONGLONG Read : 1; ULONGLONG Write : 1; ULONGLONG Execute : 1; ULONGLONG MemoryType : 3; ULONGLONG IgnorePAT : 1; ULONGLONG Ignored0 : 1; ULONGLONG Accessed : 1; ULONGLONG Dirty : 1; ULONGLONG UserExecute : 1; ULONGLONG Ignored1 : 1; ULONGLONG PageFrameNumber : 40; ULONGLONG Ignored2 : 5; ULONGLONG VerifyGuestPaging : 1; ULONGLONG PagingWriteAccess : 1; ULONGLONG Ignored3 : 1; ULONGLONG SupervisorShadowStack : 1; ULONGLONG SubPageWritePermissions : 1; ULONGLONG Ignored4 : 1; ULONGLONG SuppressVE : 1; }; ULONGLONG Value; } EPT_PLM4E, *PEPT_PLM4E;

2.4 EPT_PTPTE 结构体

EPT_PTPTE 表示 EPT 中的页表页表项,以下是一个假设的定义:

c
typedef union _EPT_PTPTE { struct { ULONGLONG Read : 1; ULONGLONG Write : 1; ULONGLONG Execute : 1; ULONGLONG MemoryType : 3; ULONGLONG IgnorePAT : 1; ULONGLONG Ignored0 : 1; ULONGLONG Accessed : 1; ULONGLONG Dirty : 1; ULONGLONG UserExecute : 1; ULONGLONG Ignored1 : 1; ULONGLONG PageFrameNumber : 40; ULONGLONG Ignored2 : 5; ULONGLONG VerifyGuestPaging : 1; ULONGLONG PagingWriteAccess : 1; ULONGLONG Ignored3 : 1; ULONGLONG SupervisorShadowStack : 1; ULONGLONG SubPageWritePermissions : 1; ULONGLONG Ignored4 : 1; ULONGLONG SuppressVE : 1; }; ULONGLONG Value; } EPT_PTPTE, *PEPT_PTPTE;

3. 其他相关结构体

您还提供了两个 MSR(Model-Specific Register)相关的结构体,以下是它们的定义和说明:

3.1 IA32_VMX_BASIC_MSR 结构体

IA32_VMX_BASIC_MSR 用于获取 VMX 基本信息,如 VMX 扩展区域的大小、物理地址宽度等。

c
typedef union _IA32_VMX_BASIC_MSR { struct { unsigned RevId : 31; // 修订版本号 unsigned Always0 : 1; // 始终为 0 unsigned szVmxOnRegion : 13; // VMXON 区域大小 unsigned Reserved1 : 3; // 保留 unsigned PhysicalWidth : 1; // 物理地址宽度 unsigned DualMonitor : 1; // 双监控支持 unsigned MemoryType : 4; // 内存类型 unsigned VmExitInformation : 1; // VM 退出信息 unsigned VMXControlsClearable : 1; // VMX 控制位可清除 unsigned VmEntryException : 1; // VM 入口异常 unsigned Reserved2 : 7; // 保留 }; ULONGLONG QuadPart; // 整个 MSR 的值 } IA32_VMX_BASIC_MSR;

3.2 IA32_FEATURE_CONTROL_MSR 结构体

IA32_FEATURE_CONTROL_MSR 用于控制和锁定 VMX 功能,确保在启用 VMX 操作前需要特定的权限设置。

c
typedef union _IA32_FEATURE_CONTROL_MSR { struct { unsigned Lock : 1; // 锁定位 unsigned EnableVmxOutsideSmx : 1; // 在非 SMX 模式下启用 VMX unsigned EnableVmxInsideSmx : 1; // 在 SMX 模式下启用 VMX unsigned Reserved : 29; // 保留 }; ULONGLONG QuadPart; // 整个 MSR 的值 } IA32_FEATURE_CONTROL_MSR;

4. 结构体说明与用途

4.1 PTE64 和 PTE32

  • PTE64PTE32 结构体分别用于 64 位和 32 位 Windows 操作系统中的页面表项。
  • 它们包含页面属性如存在位、读写权限、用户/内核权限、访问位、脏位等,以及页面帧号。
  • 这些结构体用于操作系统的内存管理,控制页面的访问权限和状态。

4.2 EPT 相关结构体

  • EPT_PTEEPT_PDEEPT_PLM4EEPT_PTPTE 等结构体用于描述 EPT 中不同层级的页表项。
  • 它们包含读、写、执行权限,内存类型(MemoryType)、页面帧号(PageFrameNumber)以及其他控制位。
  • EPT 主要用于虚拟化环境中,优化虚拟机的内存访问性能,减少二级地址转换的开销。

4.3 MSR 相关结构体

  • IA32_VMX_BASIC_MSR 提供了 VMX 操作的基本信息,如 VMXON 区域大小、物理地址宽度等。
  • IA32_FEATURE_CONTROL_MSR 用于启用或禁用 VMX 功能,并锁定相关设置,确保系统安全。

5. 注意事项

  1. 兼容性:以上结构体定义可能会根据具体的 Windows 版本或英特尔 CPU 型号有所不同。请参考最新的官方文档和头文件以获取准确的定义。
  2. 权限与安全:操作这些低级别的结构体需要具备相应的权限和深刻理解,否则可能导致系统不稳定或安全漏洞。
  3. 虚拟化开发:如果您正在开发与虚拟化相关的软件,请确保正确实现 EPT 相关功能,并充分测试以确保兼容性和稳定性。

6. 参考资料

希望以上内容能够帮助您理解和使用这些结构体。如果您有更多具体的问题或需要进一步的解释,请随时提问!

このQ&Aを共有