跳转至

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 值(仅返回)