无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: chenall

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

    [复制链接]
发表于 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
回复

使用道具 举报

 楼主| 发表于 2016-1-14 15:25:17 | 显示全部楼层
不点 发表于 2016-1-14 15:13
一次性读入?

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

是的,我昨天才注意到只能读127个.

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

点评

比规范读得更多,这不知道是不是好事。 问题是,如果多读了,属于超出规范,那有可能死机,尤其是对于故意制造死机的那些 bios 来说。  详情 回复 发表于 2016-1-14 15:28
回复

使用道具 举报

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

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

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

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

点评

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

使用道具 举报

 楼主| 发表于 2016-1-14 15:54:09 | 显示全部楼层
不点 发表于 2016-1-14 15:28
比规范读得更多,这不知道是不是好事。

问题是,如果多读了,属于超出规范,那有可能死机,尤其是对于 ...

刚开始我没有注意,我自己用的电脑和虚拟机都是可以全部读入的,并且我看了一下读入的数据还是正常的.

要多次读入的话会麻烦些,需要添加好多代码.还在修改中.
回复

使用道具 举报

发表于 2016-1-14 16:27:47 | 显示全部楼层
昨晚想到一个问题, umbr在安装前就确定好grldr文件的扇区位置了吗?  而并没有做分析文件系统的工作吗?

   那下面这种情况, umbr能够正常工作呢?

1, 复制附件中的grldr到U盘根目录
2, 安装umbr, 使用命令umbr -d=0 (hd0,0)/grldr
3, 把U盘根目录的grldr复制多一份, 并改名为grldr2, 即grldr2和grldr都在根目录, 但存在于不同扇区
4, 把grldr删掉, grldr2重命名为grldr
5, 请问umbr能正常工作吗?

点评

这个是使用固定位置的. 即然是固定位置的,就和文件名没有什么关系了. 移动或删除就会启动失败(但不一定因为有时候虽然移动或删除了但文件内容还在这里还是可以启动的). 这就是这个的弊端,所以可以指定多个备  详情 回复 发表于 2016-1-14 20:37
回复

使用道具 举报

发表于 2016-1-14 19:41:26 来自手机 | 显示全部楼层
gpt分区表间隙一般可以容纳grldr.mbr,有时也可以容纳grldr。也可以将grldr安装到不使用的分区表。
回复

使用道具 举报

发表于 2016-1-14 19:50:24 来自手机 | 显示全部楼层
我不清楚,现在将grldr安装到(hd1,0)/ ,是一般意义上的写入?即写入文件分配表?可以通过,Windows 看到这个增加的grldr吗?

点评

这个的安装只是修改了MBR引导,其它的没有动.  详情 回复 发表于 2016-1-14 20:39
回复

使用道具 举报

发表于 2016-1-14 19:54:24 来自手机 | 显示全部楼层
如果将grldr写入特殊位置,那么删除所有的可见的grldr(包括改名),应该一切正常。
回复

使用道具 举报

 楼主| 发表于 2016-1-14 20:37:59 | 显示全部楼层
guyue2011 发表于 2016-1-14 16:27
昨晚想到一个问题, umbr在安装前就确定好grldr文件的扇区位置了吗?  而并没有做分析文件系统的工作吗?

  ...

这个是使用固定位置的.
即然是固定位置的,就和文件名没有什么关系了.

移动或删除就会启动失败(但不一定因为有时候虽然移动或删除了但文件内容还在这里还是可以启动的).

这就是这个的弊端,所以可以指定多个备用位置并且通过内置的校验判断内容是否有变化.

点评

哦..明白了..谢谢大大指教..  详情 回复 发表于 2016-1-14 22:31
回复

使用道具 举报

 楼主| 发表于 2016-1-14 20:39:09 | 显示全部楼层
2011yaya2007777 发表于 2016-1-14 19:50
我不清楚,现在将grldr安装到(hd1,0)/ ,是一般意义上的写入?即写入文件分配表?可以通过,Windows 看到这 ...

这个的安装只是修改了MBR引导,其它的没有动.
回复

使用道具 举报

 楼主| 发表于 2016-1-14 20:49:06 | 显示全部楼层
再次更新了

这次应该比较完美了,我自己测试了暂时没发现问题.

点评

的確目前的版本在實機測試正常 , 之前的版本怪怪的  详情 回复 发表于 2016-1-14 22:29
回复

使用道具 举报

发表于 2016-1-14 22:29:57 | 显示全部楼层
chenall 发表于 2016-1-14 20:49
再次更新了

这次应该比较完美了,我自己测试了暂时没发现问题.

的確目前的版本在實機測試正常 , 之前的版本怪怪的
回复

使用道具 举报

发表于 2016-1-14 22:31:37 | 显示全部楼层
chenall 发表于 2016-1-14 20:37
这个是使用固定位置的.
即然是固定位置的,就和文件名没有什么关系了.

哦..明白了..谢谢大大指教..
回复

使用道具 举报

发表于 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
回复

使用道具 举报

 楼主| 发表于 2016-1-18 17:18:58 | 显示全部楼层
本帖最后由 chenall 于 2016-1-18 17:20 编辑
不点 发表于 2016-1-18 16:28
这个源代码在哪?github 上是很老的源代码,没更新。


https://github.com/chenall/grubutils

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


麻烦你看看有没有问题,

点评

wee 是有连续 63 个扇区,所以第一扇区写得复杂。 你这个 umbr 只有一个扇区,就没必要搞那么复杂了。 所以,第一感觉,首先就发现可以精简掉一些无用的代码。 wee 是考虑被 boot.ini 加载,由于是多扇区,  详情 回复 发表于 2016-1-18 21:56
回复

使用道具 举报

发表于 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
回复

使用道具 举报

 楼主| 发表于 2016-1-19 09:31:38 | 显示全部楼层
不点 发表于 2016-1-18 21:56
wee 是有连续 63 个扇区,所以第一扇区写得复杂。

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


前面的代码我没怎么动,主要是不明白用途,
我修改了move_down_to_7000相关代码本来是move_down_to_7C00的,
因为7C00后要启动需要,所以我改成了7000.

不知后面的代码有没有什么问题?

另外有一个疑问,MBR代码应该是16位的,可以使用32位寄存器吗?
我之前以为不行,后面看到了前面的repz movsl 代码,所以就测试了下,发现可以正常使用.

如果能再优化掉20个节字左右应该足够支持启动NTLDR/BOOTMGR了

点评

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

使用道具 举报

发表于 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 层面制造不兼容的一个总体规划吧,逐步消灭实模式。


回复

使用道具 举报

发表于 2016-1-21 15:40:52 | 显示全部楼层
感觉这个程序像病毒
回复

使用道具 举报

发表于 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?难道无法成功?究竟需要做什么额外的工作才能成功呢?

麻烦知情者给以解惑。

回复

使用道具 举报

发表于 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
回复

使用道具 举报

发表于 2016-2-6 20:23:45 | 显示全部楼层
本帖最后由 qj_tzy 于 2016-2-6 20:26 编辑
不点 发表于 2016-2-6 18:38
你成功启动 Win7,菜单命令是怎样的?是不是直接用 chainloader 加载硬盘上的 bootmgr?

你的硬盘是纯 ...


在我的GPT分区单硬盘下,均以安装ghost版方式,安装了winxp+win7+win8三个分区系统,均是按bios+gpt方式启动的。启动时能用chainloader /ntldr启动winxp,但不能以chainloader /bootmgr或chainloader +1方式启动nt6系统,读取BCD时会出错(即使BCD是修改好的)。目前,我所知道的,只有三种方法能以bios+gpt方式启动nt6系统:一是用grldr 执行一个软盘映像ima文件,其内有bootmgr和boot目录下的BCD等文件;二是grldr 调用ntboot 以nt6=(hdx,y) 方式启动。三是用xorboot_0.74版(还为测试版,Pauly 尚未公开发布)启动NT6系统。其他还有什么方法,我就不知道了。
回复

使用道具 举报

发表于 2016-2-6 20:26:03 | 显示全部楼层
不点 发表于 2016-2-6 18:38
你成功启动 Win7,菜单命令是怎样的?是不是直接用 chainloader 加载硬盘上的 bootmgr?

你的硬盘是纯 ...

硬碟 : GPT

安裝方式 : MBR 裝好 再 GHOST 改註冊表

啟動
title [09] 執行 Windows 7 (32位元)
map --mem /boot/win7.ima (fd0)
map --hook
rootnoverify (fd0)
chainloader +1

WIN7.IMA
01.PNG

02.PNG
回复

使用道具 举报

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

使用道具 举报

发表于 2016-2-17 12:34:07 | 显示全部楼层
本帖最后由 minmax 于 2016-2-17 12:37 编辑

用USBDISK(0,0) + USBHDD(1,1)
umbr -d=1 (hd0,0)/grldr (hd0,1)/grldr
要兩個FILE才成功
實體USBHDD 安裝完成  用QEMU已經可以開
但是真正拿來BIOS PC使用, 報找不到檔案(因為GPT是不能設為開機)
請問這種狀況如何解決

点评

根据你的描述,当你的主板检测到硬盘是 GPT 格式时,拒绝从 GPT 的第一扇区引导系统,也就是说,强制使用 EFI 启动方式。 我没猜错你的意思吧? 那就无解呀。你乖乖儿地使用 EFI 吧。  详情 回复 发表于 2016-2-17 16:56
我打的是 umbr -d=1 (hd1,0)/grldr (hd1,1)/grldr 才對 實體機顯示 reboot and select proper boot device or insert boot media in selected boot device and press a key  详情 回复 发表于 2016-2-17 16:09
"找不到檔案"是哪里的提示? 另外上面 umbr -d=1 (hd0,0)/grldr (hd0,1)/grldr 这个用法也是错误的. 这个-d=x必须和后面的hdx一样,比如 umbr -d=0 (hd0,0)/grldr (hd0,1)/grldr 或 umbr -d=1 (hd1,0)  详情 回复 发表于 2016-2-17 14:50
回复

使用道具 举报

 楼主| 发表于 2016-2-17 14:50:19 | 显示全部楼层
本帖最后由 chenall 于 2016-2-17 14:51 编辑
minmax 发表于 2016-2-17 12:34
用USBDISK(0,0) + USBHDD(1,1)
umbr -d=1 (hd0,0)/grldr (hd0,1)/grldr
要兩個FILE才成功


"找不到檔案"是哪里的提示?

另外上面
umbr -d=1 (hd0,0)/grldr (hd0,1)/grldr

这个用法也是错误的.这个命令运行应该会有错误提示的吧??

这个-d=x必须和后面的hdx一样,比如
umbr -d=0 (hd0,0)/grldr (hd0,1)/grldr

umbr -d=1 (hd1,0)/grldr (hd1,1)/grldr


回复

使用道具 举报

发表于 2016-2-17 16:09:10 | 显示全部楼层
本帖最后由 minmax 于 2016-2-17 16:11 编辑
minmax 发表于 2016-2-17 12:34
用USBDISK(0,0) + USBHDD(1,1)
umbr -d=1 (hd0,0)/grldr (hd0,1)/grldr
要兩個FILE才成功


我打的是 umbr -d=1 (hd1,0)/grldr (hd1,1)/grldr 才對
實體機顯示
reboot and select proper boot device
or insert boot media in selected boot device and press a key
我用的是一個乾淨的128G SSD HDD, GPT 切 FAT32 , NTFS 各一

点评

这个提示好像是系统没有识别到启动设备?? 可以用WINHEX之类的检查下硬盘的0扇区内容.  详情 回复 发表于 2016-2-17 16:44
回复

使用道具 举报

 楼主| 发表于 2016-2-17 16:44:29 | 显示全部楼层
minmax 发表于 2016-2-17 16:09
我打的是 umbr -d=1 (hd1,0)/grldr (hd1,1)/grldr 才對
實體機顯示
reboot and select proper boot d ...

这个提示好像是系统没有识别到启动设备??

可以用WINHEX之类的检查下硬盘的0扇区内容.

点评

是的,我的疑問也是如何讓 GPT格式的HDD被識別為啟動,目前並沒有工具可以達成(以前都倚賴BOOTICE) 手動方法已經忘了要修改哪了@@  详情 回复 发表于 2016-2-17 16:55
回复

使用道具 举报

发表于 2016-2-17 16:55:12 | 显示全部楼层
chenall 发表于 2016-2-17 16:44
这个提示好像是系统没有识别到启动设备??

可以用WINHEX之类的检查下硬盘的0扇区内容.

是的,我的疑問也是如何讓 GPT格式的HDD被識別為啟動,目前並沒有工具可以達成(以前都倚賴BOOTICE)
手動方法已經忘了要修改哪了@@
回复

使用道具 举报

发表于 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
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-19 02:25

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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