AMD VMCB 结构详解:虚拟化控制块内部布局
VMCB(Virtual Machine Control Block)是 AMD SVM 唯一的虚拟化状态容器。它分为控制区(0x000-0x3FF)、保存区(0x400-0xFFF)与截获位图(control 区内的专用区域),理解其布局才能正确编写 SVM Hypervisor。
核心概念
截获位图
控制区内含三张位图(读写 CR、读写 DR、异常),置位即表示截获对应事件。
事件注入字段
控制区 0x60 处可写入注入事件编码(类型、向量、错误码),用于向 guest 注入中断/异常。
保存区
0x400 起保存 guest 通用寄存器、段寄存器、CR0-CR17、EFER、RIP/RSP 等全部状态。
EXITCODE 与 EXITINFO
VMCB 偏移 0x08 记录最近 #VMEXIT 的原因码,0x10 是附加限定信息(如发生异常的 RIP)。
NP 控制字段
控制区 0x40 起为嵌套页表(NPT)控制:nCR3、gCR3、TLB 控制等。
VMCB 复用
#VMEXIT 后 VMCB 含 guest 最新状态,host 可修改后再次 VMRUN,无需重新初始化全部字段。
关键代码
// AMD VMCB 常用偏移(C 语言示意)
#define VMCB_CTRL_INTERCEPT_CR 0x000
#define VMCB_CTRL_INTERCEPT_DR 0x010
#define VMCB_CTRL_INTERCEPT_EXC 0x020
#define VMCB_CTRL_EXITCODE 0x008
#define VMCB_CTRL_EXITINFO1 0x010
#define VMCB_CTRL_EXITINFO2 0x018
#define VMCB_CTRL_NPT_NCR3 0x040
#define VMCB_CTRL_EVENT_INJ 0x060
#define VMCB_SAVE_RAX 0x400
#define VMCB_SAVE_RIP 0x418
#define VMCB_SAVE_CR0 0x448
#define VMCB_SAVE_CR3 0x458
// 处理 #VMEXIT:
exit_code = *(u32 *)(vmcb + VMCB_CTRL_EXITCODE);
fault_rip = *(u64 *)(vmcb + VMCB_CTRL_EXITINFO2);结构速查表
| 0x000 Control Area | 截获位图、事件注入、NPT 控制、退出信息等 |
|---|---|
| 0x008 EXITCODE | 最近的 #VMEXIT 原因码 |
| 0x010 EXITINFO1/2 | 退出限定信息(地址、错误码等) |
| 0x040 nCR3 | 嵌套页表(NPT)根地址 |
| 0x060 Event Injection | 向 guest 注入中断/异常的事件编码 |
| 0x400 Save Area | guest 全部寄存器与系统状态 |
延伸阅读
系统讲解虚拟化技术的基本概念、发展脉络与分类,帮助理解 Intel VT-x 与 AMD-V 在虚拟化中的核心作用。
→回顾 x86 硬件虚拟化三十年的演进:二进制翻译、Intel VT-x、AMD SVM、EPT/NPT 到现代虚拟化安全生态。
→深入讲解 Intel VT-x 的 VMX root/non-root 两种模式、VM-exit/VM-entry 机制与 VMCS 虚拟机控制结构。
→详解 VMXON/VMXOFF/VMLAUNCH/VMRESUME/VMREAD/VMWRITE 等指令语义与 VMCS 六大字段区域的布局。
→解析 VMX root/non-root 双模式切换、VM-exit 事件流与 VT 调试器如何利用双模式实现隐形监控。
→讲解嵌套虚拟化的工作机制:VMCS/VMCB 嵌套、shadow VMCS 优化与 WSL2、云环境中的应用。
→全面解析 AMD SVM(Secure Virtual Machine)架构:VMCB、#VMEXIT、guest/host 模式与 AMD 硬件虚拟化设计。
→解析 AMD NPT 两级地址翻译机制、nCR3 根指针、TLB 控制与对性能和安全监控的影响。
→解析 AMD NPT 两级地址翻译机制、nCR3 根指针、TLB 控制与对性能和安全监控的影响。
→从模式设计、状态结构、截获机制、嵌套页表到生态支持,系统对比 AMD SVM 与 Intel VT-x 的异同。
→从模式设计、状态结构、截获机制、嵌套页表到生态支持,系统对比 AMD SVM 与 Intel VT-x 的异同。
→解析 AMD-Vi IOMMU 的 DMA 重映射、中断重映射与设备直通机制,及其在安全上的作用。
→解析 AMD-Vi IOMMU 的 DMA 重映射、中断重映射与设备直通机制,及其在安全上的作用。
→手把手教你在 AMD 平台开启 SVM 虚拟化:BIOS 入口、命名差异、验证方法与常见问题。
→总览 VT 调试器的核心原理:Hypervisor 层隔离、EPT 无痕断点、VM-exit 事件处理与隐形内存访问。
→逐一解析 VT 调试器的核心功能:无痕断点、无痕 Hook、驱动级内存读写、进程保护与反反调试能力。
→从下载安装到设置第一个断点的完整上手教程:环境要求、驱动加载、附加目标与常见问题排查。
→通过任务管理器、systeminfo、CPU-Z 与命令行等多种方法,快速确认 CPU 虚拟化支持与启用状态。
→深入解析 VT Hook 的两种核心实现:EPT 页表重映射 Hook 与写保护式 Hook,及其对抗完整性校验的原理。
→从传统断点的检测面出发,解析 EPT 页级断点与虚拟化硬件断点的实现原理与反检测能力。
→解析 VT 层进程保护的技术栈:EPT 内存隐藏、截获 TerminateProcess、防注入与防调试的完整方案。
→探讨虚拟化技术在反作弊系统中的角色:从内核检测升级到 Hypervisor 级监控,以及绕过与反绕过的攻防博弈。
→