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格式, 云资产清单, 信息安全, 固件安全, 客户端加密, 寄存器定义, 底层开发, 性能计数器, 操作系统开发, 数据转换, 文档自动化, 无后门, 机器可读, 硬件接口, 系统编程, 英特尔手册, 虚拟化技术, 逆向工具, 逆向工程