BOOTAPP 规范
这是一份不完整的规范,描述用于在 Windows NT6(Vista、Server 2008 及更高版本)启动过程各阶段之间传递信息的数据结构。
入口点
BOOTAPP 程序是 32 位 PE 可执行文件。进入时,CPU 使用禁用分页的平坦 32 位寻址,并且中断被禁用。
栈上传递单个参数:指向 BOOTAPP 结构的指针。
BOOTAPP 结构
| 偏移 |
类型 |
内容 |
| 0x00 |
char[8] |
"BOOT APP"签名 |
| 0x08 |
dword |
版本? |
| 0x0c |
dword |
所有结构的总长度 |
| 0x10 |
dword |
机器架构 |
| 0x14 |
dword |
零 |
| 0x18 |
dword |
指向 PE 头部的指针 |
| 0x1c |
dword |
零 |
| 0x20 |
dword |
PE 在内存中的长度 |
| 0x24 |
dword |
到内存描述符结构的偏移 |
| 0x28 |
dword |
到 BTAPENT 结构的偏移 |
| 0x2c |
dword |
到 BTAPENT-duplicate-fragment 结构的偏移 |
| 0x30 |
dword |
到回调结构的偏移 |
| 0x34 |
dword |
到 Pointless 结构的偏移 |
内存描述符结构
| 偏移 |
类型 |
内容 |
| 0x00 |
dword |
版本? |
| 0x04 |
dword |
此头部的长度 |
| 0x08 |
dword |
内存区域描述符的数量 |
| 0x0c |
dword |
每个内存区域描述符的长度 |
| 0x10 |
dword |
0x00000008 ? |
| 0x14 |
array |
内存区域描述符数组 |
内存区域描述符
| 偏移 |
类型 |
内容 |
| 0x00 |
dword |
零 |
| 0x04 |
dword |
零 |
| 0x08 |
qword |
起始页地址 |
| 0x10 |
dword |
零 |
| 0x14 |
dword |
零 |
| 0x18 |
qword |
页数 |
| 0x20 |
dword |
零 |
| 0x24 |
dword |
标志 ? |
BTAPENT 结构
| 偏移 |
类型 |
内容 |
| 0x00 |
char[8] |
"BTAPENT"签名 |
| 0x08 |
dword |
0x00000021 ? |
| 0x0c |
guid |
启动项的 GUID |
| 0x1c |
dword |
零 |
| 0x20 |
dword |
零 |
| 0x24 |
dword |
零 |
| 0x28 |
dword |
零 |
| 0x2c |
struct |
BTAPENT-0x2c 结构 |
BTAPENT-0x2c 结构
| 偏移 |
类型 |
内容 |
| 0x00 |
dword |
0x11000001 ? |
| 0x04 |
dword |
此头部的长度 |
| 0x08 |
dword |
BTAPENT 内后续结构的总长度 |
| 0x0c |
dword |
零 |
| 0x10 |
dword |
零 |
| 0x14 |
dword |
零 |
BTAPENT-0x2c-0x18 结构
| 偏移 |
类型 |
内容 |
| 0x00 |
dword |
零 |
| 0x04 |
dword |
零 |
| 0x08 |
dword |
零 |
| 0x0c |
dword |
零 |
BTAPENT-0x2c-0x18-0x10 结构
| 偏移 |
类型 |
内容 |
| 0x00 |
dword |
0x00000004 ? |
| 0x04 |
dword |
零 |
| 0x08 |
dword |
此结构的长度 |
| 0x0c |
dword |
零 |
| 0x10 |
dword |
0x00000100 ? |
| 0x14-0x45 |
byte |
零 |
BTAPENT-duplicate-fragment 结构
BTAPENT-0x2c-0x18-0x10 结构的副本
回调结构
| 偏移 |
类型 |
内容 |
| 0x00 |
dword |
指向回调入口点指针的指针 |
| 0x04 |
dword |
零 |
Pointless 结构
| 偏移 |
类型 |
内容 |
| 0x00 |
dword |
版本? |
| 0x04 |
dword |
零 |
| 0x08 |
dword |
零 |
| 0x0c |
dword |
零 |
| 0x10 |
dword |
零 |
| 0x14 |
dword |
零 |
| 0x18 |
dword |
零 |
实模式回调参数
| 偏移 |
类型 |
内容 |
| 0x00 |
dword |
要调用的 INT 号或 segment:offset 地址 |
| 0x04 |
dword |
%eax 值 |
| 0x08 |
dword |
%ebx 值 |
| 0x0c |
dword |
%ecx 值 |
| 0x10 |
dword |
%edx 值 |
| 0x14 |
dword |
忽略(%esp 占位符?) |
| 0x18 |
dword |
忽略(%ebp 占位符?) |
| 0x1c |
dword |
%esi 值 |
| 0x20 |
dword |
%edi 值 |
| 0x24 |
dword |
忽略(%cs 占位符?) |
| 0x28 |
dword |
%ds 值 |
| 0x2c |
dword |
忽略(%ss 占位符?) |
| 0x30 |
dword |
%es 值 |
| 0x34 |
dword |
%fs 值 |
| 0x38 |
dword |
%gs 值 |
| 0x3c |
dword |
eflags 值(仅返回) |