Windows 启动过程没有意义!

逆向工程 部件 硬件 二进制 二进制格式
2021-06-17 16:45:10

这是我的问题:Windows 7、8 等启动过程如何工作?

从操作系统的卷引导扇区加载的第一段代码是 bootmgr.exe。但这就是为什么这没有意义:

“exe”是一个可移植的可执行文件,它由操作系统 (Windows) 解析的元数据组成。当大多数情况下需要加载整个操作系统来解析 PE 时,引导管理器不可能是 PE 文件,即加载器、内存管理服务、VM 的系统线程、设备驱动程序等。

那么第一个程序怎么可能是PE呢?我的假设是它不能,否则它就没有意义(除非 Windows 的加载器软件告诉它,否则 CPU 不会“解析”PE)。

所以基本上,在最低级别上,Windows 启动过程是错误/错误处理信息?

1个回答

(我假设您在谈论使用传统 BIOS 的引导过程,因为 UEFI 情况不同)

引导管理器不是 PE,或者更确切地说,不仅仅是PE。它从 16 位实模式部分开始。您可以通过查看文件自行检查。

0000000000: E9 D5 01 EB 04 90 00 00 │ 00 52 8B C3 0E 07 66 33
0000000010: DB BA 01 00 E8 34 00 E9 │ 51 01 2E 88 16 06 00 50

如您所见,它不是以MZ签名开头,而是直接以机器代码开头所以引导扇区只需要将文件加载到内存中并跳转到它 - 其余的 bootmgr 将自行完成。16 位部分加载并解压缩 PE 部分,切换到保护模式,并将执行传递给它。

压缩后的 PE 数据可以在签名BMCIBMXH. 似乎有人制作了一个工具来自动查找和解压缩它:

https://github.com/coderforlife/bmzip

未压缩的 PE 不需要完整的操作系统,因为它不使用任何操作系统服务。它自己实现了所有必要的功能——事实上,它本身就是一个迷你操作系统。它不需要那么多——例如,它不需要多线程、分页内存或上下文切换。它只需要足够的功能来查找和加载下一阶段 (winload.exe)。