ia32-doc/ia32-doc

GitHub: ia32-doc/ia32-doc

将Intel架构手册中的CPU寄存器、系统结构定义转换为机器可读的YAML格式,便于OS和虚拟化开发者直接集成使用。

Stars: 692 | Forks: 90

# IA32-doc IA32-doc 是一个项目,旨在将 _Intel Manual_ 中的尽可能多的定义 转换为机器可处理的格式(在本例中为:**yaml**)。 ### 为什么? 据我所知,这样的东西并不存在。你可以尝试从 [Linux 源代码][linux-source]、[ReactOS][reactos-source]、[VirtualBox 源代码][virtualbox-source] 或 [EDK-II 源代码][edk-ii-source] 中挑选定义, 但你可以预料到定义集合有限,而且通常文档匮乏。 ### 这有什么用? **[为了这个](out/ia32.h)**。为了你的业余爱好 OS。为了你的业余爱好 hypervisor。为了你在 APIC、各种 MSR、SGX、性能计数器等方面的实验,不胜枚举。 ### 用法 ``` $ python3 main.py -c conf/default.yml -f yaml/Intel/index.yml ``` ### 常见问题解答 ##### 有 32 位或 64 位 CPU 的定义吗? 希望两者都有。 ##### 有 AMD 特有的内容定义吗? 没有,只有 Intel 特有的内容。 ##### 你使用了哪些来源? 主要是:_Intel® 64 and IA-32 architectures software developer’s manual combined volumes: 1, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D, and 4 **(May 2018)**_。 我还从其他项目(VirtualBox, TianoCore)中借鉴了各种名称/描述的灵感。 ##### 除了 C-header 之外还有其他输出格式吗? 没有。不过,扩展 Python 代码以生成其他编程语言的源代码应该不会太难。 ##### 我需要哪些 Python 包? 只需 **PyYAML**。以及 Python >= 3.7。 ##### 谁来维护它? 没人。也许奇迹发生,有人(或一群人)决定 fork 这个 repo 并维护它。 不过,别指望我能跟上 Intel Manual 的每一次发布。尽管我可能会随时添加我感兴趣的内容。 ##### 里面有什么? 查看 [yaml/Intel](yaml/Intel) 目录。目前转录的内容包括: - 控制寄存器 (CR0, CR3, CR4, CR8) - 当前 Intel Manual 中发现的每一个 EAX/ECX 函数的 CPUID - MSR (Model Specific Registers) - 分页相关内容 (PML4E/PDPTE/PDE/PTE, 包括 32/64 位) - 段描述符 (GDT/LDT/IDT/TSS) - VMX 相关定义 (EPT/VMCS) - APIC - EFLAGS - 内存类型 (UC/WC/WT/WP/WB) ##### 我不喜欢使用 UINT*/CamelCase/Doxygen,我该怎么办? 要更改整数的命名,请更改 [conf/default.yml](conf/default.yml) 中的 `int_type_*` 值。 要更改与输出文件相关的任何内容,你必须修改 [`DocCProcessor` 类](ia32doc/processors/c_processor.py)。 要创建新的 “yaml 文档处理器”(例如用于 Rust),请派生 [`DocProcessor` 类](ia32doc/processors/base.py)。 ##### 我想添加新的 yaml 定义,我该怎么做? 查看 [yaml/template.yml](yaml/template.yml) 以更好地理解格式。 此外,通过查看其他 yaml 文件,你应该能明白其意。 ### 备注与说明 - 首先 —— 归根结底,**你应该始终查阅神圣的 Intel Manual**。 无条件地。认真地说,一旦你过了 _Hello world_ 阶段并决定编写你的 OS 或 hypervisor, 如果不阅读 Intel Manual,你是不可能成功的。 - 这些 _yaml_ 转录中可能存在错误、拼写错误、复制粘贴错误。 - 我知道这里缺少很多东西。我主要尝试转录我个人想要的内容。 ### 待办事项 - ? OriginalNames - 保留大小写敏感性 (BIOS, x2APIC, ToPA, ...) - ? 可能拆分为多个 .h - ?? 添加 doxygen 主页 - ??? 添加 AMD - 找出还缺少什么 - 修复 MSR 寄存器的 32/64 位域 - 增加位域同时拥有 UINT32/UINT64 成员的可能性 - 添加 CPUID 子叶定义 ### 许可证 本仓库中的所有代码均在 MIT 许可下开源。请参阅本仓库中的 **LICENSE.txt** 文件。 如果你觉得这个项目有趣,可以请我喝杯咖啡 ``` BTC 3GwZMNGvLCZMi7mjL8K6iyj6qGbhkVMNMF LTC MQn5YC7bZd4KSsaj8snSg4TetmdKDkeCYk ```
标签:APIC, CPUID, CPU架构, C语言头文件, Hypervisor, IA32架构, Intel, meg, MSR, Python, PyYAML, SGX, x86_64, YAML格式, 云资产清单, 信息安全, 固件安全, 客户端加密, 寄存器定义, 底层开发, 性能计数器, 操作系统开发, 数据转换, 文档自动化, 无后门, 机器可读, 硬件接口, 系统编程, 英特尔手册, 虚拟化技术, 逆向工具, 逆向工程