无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 45640|回复: 92
打印 上一主题 下一主题

umbr 测试(适用于BIOS+GPT磁盘的MBR程序)

    [复制链接]
1#
发表于 2016-1-12 17:37:04 | 显示全部楼层
最好再介绍详细一点。初次接触的人,对此没有概念。比如说:

占用多少个扇区?

启动的逻辑线索、步骤大致是怎样的?

与其他引导代码有何共同点与不同点?

回复

使用道具 举报

2#
发表于 2016-1-12 20:46:06 | 显示全部楼层
chenall 发表于 2016-1-12 20:05
其实这个很早之前就有介绍过

就是一个MBR引导程序只需要一个扇区,

有这个介绍就很好。让人起码知道,只需一个扇区。

回复

使用道具 举报

3#
发表于 2016-1-13 17:03:20 | 显示全部楼层
chenall 发表于 2016-1-13 10:08
请问一下要如何启动某个分区的PBR?

比如知道(hd0,0)分区的位置,我想直接启动(hd0,0)+1,直接加载启动好 ...


应该可以加载 PBR 启动的。需要加载 512 字节到 0000:7C00 处,并设置正确的 DL 寄存器。扩展分区里面的逻辑分区上的 PBR 是不能启动的,因为 PBR 偏移 0x1C 处的 “分区起始扇区号” 是错误的。必须纠正为正确值才能启动。然而 Umbr 只有一个扇区的代码空间,所以不可能添加纠正 PBR “分区起始扇区号” 的代码了。wee 有 63 个扇区的代码空间,代码量充足,因此能够纠正 PBR 上的 “分区起始扇区号”。

你也可以考虑加大 Umbr 的代码空间,这样功能就有可能增加了。

回复

使用道具 举报

4#
发表于 2016-1-13 17:31:10 | 显示全部楼层
chenall 发表于 2016-1-13 14:03
#18
因为使用的是绝对位置,所以改名删除有时候是不影响启动的(因为文件的位置不变)

我相信你很快就会成功的,汇编语言对你来说没什么困难。

真正的困难在于,BIOS 的访问能力是有限的,许多 BIOS 只能访问 128G,不能访问后面的扇区。说不定还会有某些恶意 BIOS,故意把 BIOS 的访问能力降低到 8G 或更低。

所以,你安装的时候,应该检查扇区号,拒绝那些位于 128G 之后的扇区号。

我觉得当前要紧的事,是得找个空间来扩大 umbr 的代码量,否则,只有这一个扇区,无法让功能更加丰富。


回复

使用道具 举报

5#
发表于 2016-1-14 15:13:44 | 显示全部楼层
chenall 发表于 2016-1-14 14:49
再修改了下,现在可以直接启动某个分区了

另外直接启动GRLDR失败的可以尝试启动WEE63.MBR估计就会成功了. ...

一次性读入?

按照公开的规范,int13/ah=42h 一个调用可以读 127 个扇区。不可能再多。

但 127 扇区基本都是支持的,除非那些恶意的 BIOS。

你不可能一次性读入整个 GRLDR 文件(它远远超过 127 扇区)。

点评

是的,我昨天才注意到只能读127个. 但有一些主机可以全部读入.  详情 回复 发表于 2016-1-14 15:25
回复

使用道具 举报

6#
发表于 2016-1-14 15:28:53 | 显示全部楼层
chenall 发表于 2016-1-14 15:25
是的,我昨天才注意到只能读127个.

但有一些主机可以全部读入.

比规范读得更多,这不知道是不是好事。

问题是,如果多读了,属于超出规范,那有可能死机,尤其是对于故意制造死机的那些 bios 来说。

点评

刚开始我没有注意,我自己用的电脑和虚拟机都是可以全部读入的,并且我看了一下读入的数据还是正常的. 要多次读入的话会麻烦些,需要添加好多代码.还在修改中.  详情 回复 发表于 2016-1-14 15:54
回复

使用道具 举报

7#
发表于 2016-1-18 16:28:54 | 显示全部楼层
这个源代码在哪?github 上是很老的源代码,没更新。

点评

https://github.com/chenall/grubutils https://github.com/chenall/grubutils/blob/master/umbr/umbr.s  详情 回复 发表于 2016-1-18 17:18
回复

使用道具 举报

8#
发表于 2016-1-18 21:56:38 | 显示全部楼层
chenall 发表于 2016-1-18 17:18
https://github.com/chenall/grubutils

https://github.com/chenall/grubutils/blob/master/umbr/um ...

wee 是有连续 63 个扇区,所以第一扇区写得复杂。

你这个 umbr 只有一个扇区,就没必要搞那么复杂了。

所以,第一感觉,首先就发现可以精简掉一些无用的代码。

wee 是考虑被 boot.ini 加载,由于是多扇区,它可能被加载在 0d00:0000 或 2000:0000 处。

你这个 umbr 只有一个扇区,肯定被加载在 0000:7c00 处,所以代码可以精简。

点评

前面的代码我没怎么动,主要是不明白用途, 我修改了move_down_to_7000相关代码本来是move_down_to_7C00的, 因为7C00后要启动需要,所以我改成了7000. 不知后面的代码有没有什么问题? 另外有一个疑问,MBR代码应  详情 回复 发表于 2016-1-19 09:31
回复

使用道具 举报

9#
发表于 2016-1-19 09:50:21 | 显示全部楼层
本帖最后由 不点 于 2016-1-19 10:01 编辑
chenall 发表于 2016-1-19 09:31
前面的代码我没怎么动,主要是不明白用途,
我修改了move_down_to_7000相关代码本来是move_down_to_7C00 ...


我觉得应该可以砍掉不少代码。这个 mbr 扇区,无论在任何情况下(包括被 boot.ini 加载),都是被加载在固定地址 0000:7C00 处。你只要了解这个,就简化了,即可开展后面的工作了。

16位 模式下,当然可以使用 32 位寄存器。这是 CPU 厂家提供的方便。遗憾的是,16 位模式无法直接使用 64 位寄存器,我认为这是 CPU 制造者有意封杀的。他们不想让 16 位的实模式能够有太多的访问能力。我认为这也是从 CPU 层面制造不兼容的一个总体规划吧,逐步消灭实模式。


回复

使用道具 举报

10#
发表于 2016-2-6 18:10:32 | 显示全部楼层
Hack Bootmgr to boot Windows in BIOS to GPT
http://reboot.pro/topic/19516-hack-bootmgr-to-boot-windows-in-bios-to-gpt/

上述这个帖子, chenall 也有回帖。我不知道他们为什么要用一些复杂的方法?比如,还要用 map --in-situ 把 GPT 虚拟为 MBR,或者创建一个 floppy image 用 fd0 里面的 bootmgr 来启动系统。

chenall 知道来龙去脉吗?

我想知道,在一个纯粹的 GPT + BIOS + Windows (不含常规 MBR 分区表)环境下,用 chenall 的 umbr 启动 grldr 然后再直接 chainloader /bootmgr 这样能否成功启动 Windows?难道无法成功?究竟需要做什么额外的工作才能成功呢?

麻烦知情者给以解惑。

回复

使用道具 举报

11#
发表于 2016-2-6 18:38:48 | 显示全部楼层
nf17b 发表于 2016-1-13 14:34
實機也測試成功 , 第二顆硬碟 3TB GPT , 最後一個分割區的 WIN7 SP1 X86

你成功启动 Win7,菜单命令是怎样的?是不是直接用 chainloader 加载硬盘上的 bootmgr?

你的硬盘是纯 GPT 方式呢,还是 GPT/MBR 双重模式?

你的 Win7 是怎么安装上的?究竟是在 MBR 方式安装的呢,还是在 GPT 方式下安装的?

点评

硬碟 : GPT 安裝方式 : MBR 裝好 再 GHOST 改註冊表 啟動 title [09] 執行 Windows 7 (32位元) map --mem /boot/win7.ima (fd0) map --hook rootnoverify (fd0) chainloader +1 WIN7.IMA [attachimg]  详情 回复 发表于 2016-2-6 20:26
在我的GPT分区单硬盘下,均以安装ghost版方式,安装了winxp+win7+win8三个分区系统,均是按bios+gpt方式启动的。启动时能用chainloader /ntldr启动winxp,但不能以chainloader /bootmgr或chainloader +1方式启动nt6  详情 回复 发表于 2016-2-6 20:23
回复

使用道具 举报

12#
发表于 2016-2-6 21:49:03 | 显示全部楼层
谢谢两位,根据你们的解释,我明白了,确实无法直接用 chainloader 启动硬盘上的 bootmgr。
回复

使用道具 举报

13#
发表于 2016-2-17 16:56:20 | 显示全部楼层
minmax 发表于 2016-2-17 12:34
用USBDISK(0,0) + USBHDD(1,1)
umbr -d=1 (hd0,0)/grldr (hd0,1)/grldr
要兩個FILE才成功

根据你的描述,当你的主板检测到硬盘是 GPT 格式时,拒绝从 GPT 的第一扇区引导系统,也就是说,强制使用 EFI 启动方式。

我没猜错你的意思吧?

那就无解呀。你乖乖儿地使用 EFI 吧。



点评

不点完全正確。 ACER品牌機無法啟動, HP NB就可以了  详情 回复 发表于 2016-2-17 21:27
回复

使用道具 举报

14#
发表于 2016-2-20 20:02:00 | 显示全部楼层
有三种可能,

1、xorboot 对这两个硬盘号码进行了交换。
2、bios 本身根据引导代码的不同而采用了不同的硬盘编号。
3、xorboot 所启动的 grldr 与 umbr 启动的 grldr,可能有某些差别,导致启动的菜单不同。就是说,grldr 文件虽然一样,但是加载 grldr 的位置以及采用的 cpu 寄存器的不同,会导致 grldr 有不同的表现,比如说,找到不同的菜单而启动,产生差异。

点评

谢谢! 我用umbr及xorboot启动的是改名的grldr,文件名特别,且只在ssd 的指定目录下才有此文件,也就是启动的文件只有一个,我猜,可能是xorboot是对这两个硬盘号作了交换,而umbr却没有交换造成的。  详情 回复 发表于 2016-2-20 20:32
回复

使用道具 举报

15#
发表于 2021-9-22 18:15:42 | 显示全部楼层
星语风 发表于 2021-6-15 09:38
发现这个工具,是读安装时的grldr绝对地址的,如果把grldr删除了,重新拷一份放在同样的地址,基本上就启动 ...

开发者要是能够像你说的那样去实现,那肯定实现了。既然没实现,那就是实现不了,或者难度太大,没兴趣去做。单扇区的 MBR 代码,不可能去查找文件系统中的文件。根据要支持的文件系统种类的不同、数量的多少,要完成这个功能,需要几十个、几百个扇区的代码空间。
回复

使用道具 举报

16#
发表于 2021-9-22 18:19:36 | 显示全部楼层
星语风 发表于 2021-9-22 16:30
发现一台 HP EliteBook 2570P,用楼主的工具,做成GPT+UMBR,重启时就是不去读0扇区,当然也就引导不起来了 ...

BIOS 要淘汰,不是光说说就完了。不仅要说到,而且要做到。可惜呀,有很多人还没有意识到。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-16 09:02

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表