yjqd 发表于 2018-11-9 09:04:36

问下不点及各位,bootmgr是通过bios找到grldr并加载的吗


win7启动菜单

windows7
grldr启动WIN8PE
--------------------------------------------------------
win7的bcd部分内容:

Windows 启动加载器
-------------------
标识符                  {id}
device                  partition=C:
path                  \windows\system32\winload.exe

实模式启动扇区
---------------------
标识符                  {id}
device                  partition=C:
path                  \grldr
--------------------------------------------------------

问题:

1、启动菜单选择"grldr启动WIN8PE",bootmgr是通过bios找到grldr并加载的吗,如果不是,那么bootmgr本身就能够识别磁盘分区并能从读磁盘分区文件吗

2、把grldr改名为winload.exe,放在C:\windows\system32中,为什么不能启动grldr

3、grldr启动后,比如ls命令,能列出分区中的文件,也是通过bios从磁盘分区读取到的吗

4、上面win7的bcd部分内容中:grldr启动项为什么叫"实模式启动扇区"

如果是微软心里高兴把它称为"实模式启动扇区",那么问这个问题没意义了
如果是微软按照启动方式把它称为"实模式启动扇区",那么"实模式启动扇区"是什么意思呢,文件不都是放在磁盘扇区中的吗,难道grldr这类启动文件称为启动扇区,winload.exe就不称为启动扇区

不知 发表于 2018-11-9 09:37:02

本帖最后由 不知 于 2018-11-9 09:38 编辑

winload.exe是32位程序,bootmgr在加载winload.exe的时候估计已经更改CPU的工作模式了,不再是实模式了。grldr的代码估计就运行不了了。而如果是实模式启动扇区,bootmgr估计不会更改CPU工作模式而直接在实模式下加载。

yjqd 发表于 2018-11-9 10:00:27

不知 发表于 2018-11-9 09:37
winload.exe是32位程序,bootmgr在加载winload.exe的时候估计已经更改CPU的工作模式了,不再是实模式了。gr ...

谢谢回复

哦,明白了,bootmgr提供了实模式下和保护模式下加载引导文件供用户选择
--------------------------------------------------------------------------------------------
实模式下加载引导文件为什么称为"实模式启动扇区"

不点 发表于 2018-11-9 10:44:04

本帖最后由 不点 于 2018-11-9 11:23 编辑

bootmgr 找到 grldr,不一定是采用 BIOS 方式,而可能是采用它自己的方式(比如它自己就有可能带有硬盘、U 盘驱动程序)。

bootmgr 找到并加载 grldr 到内存后,会首先切换到实模式,然后再把控制权交给 grldr。

bootmgr 并不认识 grldr 是什么软件。grldr 属于 “无名软件”,在 bootmgr 看来,这类软件统统属于 “实模式代码序列” 的范畴,所以 bootmgr 就把这类软件称为 “实模式启动扇区”。

没研究过 winload.exe,请参考其他人给出的答复。



我得补充一下。用 win7 加载 grldr,最好的方式是建立 boot.ini 文件(此文件与 bootmgr 放在一起),内容如下:



timeout=5

c:\grldr="grub4dos"


其中,c:\grldr 中的 c: 必须是 c:,不可以写成别的盘号。此处不区分大小写,因此,可以写成 C: 。即使你的 bootmgr 所在的盘符不是 C:,你也得写成 C:。否则,bootmgr 以及 NTLDR 都会拒绝加载 grldr。注意,grldr 也应该与 boomgr 放在同一文件夹(通常是根目录)下。如果 grldr 不放在根目录,也应该放在与 bootmgr 相同的分区上,并采用如下格式(注意盘符 C: 仍然是不可更改的——你既不可以去掉盘符 c:,也不可以更改成别的盘符):

c:\...\...\grldr="......."

grldr 放在根目录下是保证能够启动成功的。放在某个子目录下能否启动成功,你需要测试(问题仅仅在于 ntldr 以及 bootmgr 在各种环境下是否都会去找子目录下的文件)。你需要检验在各种情况下是否都能启动成功。

yjqd 发表于 2018-11-9 11:39:09

不点 发表于 2018-11-9 10:44
bootmgr 找到 grldr,不一定是采用 BIOS 方式,而可能是采用它自己的方式(比如它自己就有可能带有硬盘、U...

谢谢回复
学习了
----------------------------------------------------------------------------------------------------------------------------
我已测试过grldr放在C盘的子目录文件下,启动成功
实模式启动扇区
---------------------
标识符                  {id}
device                  partition=C:
path                  \test\grldr
description             启动WIN8PE和DOS系统
----------------------------------------------------------------------------------------------------------------------------
有朋友作了更多的测试:

bootmgr能直接引导grldr 重要
http://bbs.wuyou.net/forum.php?mod=viewthread&action=printable&tid=376682
liuzhaoyzz

我抽空试了下,bootmgr不但能够通过BCD引导C:\glrdr,还可以加载C:\grldr.mbr,可以加载E:\grldr和E:\grldr.mbr,

甚至可以加载E:\boot\grub\grldr(根目录下不需要放grldr),前提是把grldr和grldr.mbr拷贝到对应的目录下面,并在

bootice中指明具体的硬盘和具体的分区及引导文件即可,不要求bootmgr和grldr同目录。真是神奇啊!
当硬盘的MBR是grub4dos的时候,MBR还是只能够查找各盘根目录下的grldr,找不到就提示No grldr。
另外,bootmgr还能够通过boot.ini引导C:\glrdr,还可以加载C:\gldr.mbr,但是不能加载E:\grldr和E:\grldr.mbr,必

须要求是C盘。我是在64位win7下面测试的。
WIN7的boot.ini范例:只要三行,必须带引号。


C:\grldr.mbr="boot from grub4dos"

sunsea 发表于 2018-11-16 23:28:01

本帖最后由 sunsea 于 2018-11-16 23:40 编辑

……bootmgr我没记错的话是两个部分构成的,一个十六进制的桩和32位的保护模式代码,内部名称叫做bootmgr.exe,是个Native模式可执行程序(啥是Native模式?开机的时候磁盘检查程序运行的那个模式),后者压缩的,前者负责解压并提供使用BIOS的基本磁盘访问(证据是它能没任何驱动访问AHCI的盘子,BIOS可是一旦加载了操作系统的AHCI驱动就不能再用BIOS的驱动了,Intel的AHCI规范里明确写着的)

bootmgr.exe里已经确认的有如下功能(剩下的我没研究过,不敢乱说)
1.读BCD,显示启动菜单(最基本的注册表操作能力)
2.最基本的Win32代码执行环境(可能移植了一部分ntoskrnl.exe的功能)(证据是它直接执行winload.exe,而且仔细看看boot文件夹下是有几个dll和exe的,都是Native程序,明显这个bootmgr.exe创建了最基本的Win32代码执行环境)
3.FAT和NTFS基本文件系统驱动
4.查找文件能力

至于bootmgr怎么找文件的……BCD里存储了文件所在的【磁盘签名】(MBR里的0x1B4处的4字节数据)和【分区起始扇区】,这是bootmgr用来找文件的数据

bootmgr.exe会按以上按图索骥找你的文件

然后如果是Windows的引导程序winload.exe则直接执行……如果是grldr,ntldr等等,bootmgr统一再用一次那个十六进制的桩返回,当做【实模式】代码加载

sunsea 发表于 2018-11-16 23:29:32

不点 发表于 2018-11-9 10:44
bootmgr 找到 grldr,不一定是采用 BIOS 方式,而可能是采用它自己的方式(比如它自己就有可能带有硬盘、U...

看一下楼上吧……

bootmgr应该是创建了【最基本的Win32代码执行环境】,然后如同创建进程一般【执行】了Winload.exe,winload.exe已经是Win32代码了

yjqd 发表于 2018-11-17 11:51:26

sunsea 发表于 2018-11-16 23:28
……bootmgr我没记错的话是两个部分构成的,一个十六进制的桩和32位的保护模式代码,内部名称叫做bootmgr.e ...

对bootmgr很好的解读知识
---------------------------------
最近看了xp启动过程,NTLDR也是启动内建驱动以识别分区:

"NTLDR启动内建的mini-file system drivers,通过这个步骤,使NTLDR可以识别每一个用NTFS或者FAT文件系统格式化的分区"

sunsea 发表于 2018-11-17 12:07:24

不点 发表于 2018-11-9 10:44
bootmgr 找到 grldr,不一定是采用 BIOS 方式,而可能是采用它自己的方式(比如它自己就有可能带有硬盘、U...

刚刚查了下资料,bootmgr是int13读盘

winload.exe也是int13读盘!!!!只有当ntoskrnl.exe读注册表装入Miniport之后才是驱动读盘!!!

我现在挺想知道微软是如何做Windows Go To的……USB的int13可以说非常恶劣的环境了

promrhxq 发表于 2018-11-17 12:30:41

bootmgr与grldr的关系,前来学习补课了

2000lg 发表于 2020-5-4 17:16:34

微软自带的命令bootsect,可以实现Ntldr和bootmgr的切换。网上有人把bootsect修改了一下,可以实现grldr和bootmgr切换。通过Bootice查看MBR和PBR,引导器仍然是bootmgr。这种算是bootmgr引导的吗?

页: [1]
查看完整版本: 问下不点及各位,bootmgr是通过bios找到grldr并加载的吗