无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: Pauly
打印 上一主题 下一主题

反馈一个 grldr.mbr 0.4.6a 的 bug

  [复制链接]
301#
发表于 2013-12-11 16:10:50 | 只看该作者
这个测试版,测试读 2 个、3个、4个、…… 一直到 127 个扇区,看看有没有成功的。

严格起见,确实应该做这个测试。

它肯定会死的,不过,在死机之后,最好等待 10 分钟以上。

grub4dos-0.4.5c-2013-12-11.7z

262.82 KB, 下载次数: 1

仍是测试,目的是进一步确定 bug 的技术细节

点评

295楼测试: 明基笔记本。 Open default file /default ..._ Try reading 1 sectors ... Try reading 2 sectors ... Try reading 3 sectors ... 停半分钟 Try reading 4 sectors ... 停半分钟 Try reading  详情 回复 发表于 2013-12-11 18:02
回复

使用道具 举报

302#
发表于 2013-12-11 18:02:32 | 只看该作者
本帖最后由 mygamexxx 于 2013-12-11 21:27 编辑
不点 发表于 2013-12-11 16:10
这个测试版,测试读 2 个、3个、4个、…… 一直到 127 个扇区,看看有没有成功的。

严格起见,确实应该 ...


301楼测试:
明基笔记本。
Open default file /default ..._  
Try reading 1 sectors ...
Try reading 2 sectors ...
Try reading 3 sectors ... 停半分钟  17:55
Try reading 4 sectors ... 停半分钟
Try reading 5 sectors ... 停半分钟
Try reading 6 sectors ... 停一分钟
Try reading 7 sectors ... 停一分钟
Try reading 8 sectors ... 停一分钟
Try reading 9 sectors ... 停一分钟
Try reading 10 sectors ... 停一分钟
Try reading 11 sectors ... 停一分钟
Try reading 12 sectors ... 停1.5分钟
Try reading 13 sectors ... 停半分钟
Try reading 14 sectors ... 停一分钟
Try reading 15 sectors ... 停一分钟
Try reading 16 sectors ... 停半分钟
Try reading 17 sectors ... 停一分钟 18:07

Try reading 42 sectors ... 18:29

Try reading 52 sectors ... 18:36

Try reading 92 sectors ... 19:07

Try reading 127 sectors ... 19:33

GRUB4DOS 0.4.5c 2013-12-10, root is (0x80)
Processing the LZMA preset-menu …  19:40

拔出U盘  20:45
进入命令行


回复

使用道具 举报

303#
发表于 2013-12-11 19:50:42 | 只看该作者
本帖最后由 不点 于 2013-12-11 20:02 编辑

辛苦了。

得知每次执行一次多扇区读,需要大约 48 秒的时间。与所读的扇区数多少没关系。

虽然一个多扇区读只需要消耗 48 秒,但它已经破坏了 BIOS 的系统,导致其后的 127 扇区的单个扇区读也失败。这 127 个单扇区的读,也花费了 10 分钟, 平均每个花费 5 秒。

先前报告正常情况下的单扇区读是每分钟 8M。

看来根本不敢让它尝试多扇区读。

我们大概只能设置一个控制参数了。


行了,没有别的测试项目了。接下来就该思考怎么样设计用户控制参数的问题了。



回复

使用道具 举报

304#
发表于 2013-12-11 20:48:25 | 只看该作者
本帖最后由 2011yaya2007777 于 2013-12-11 21:02 编辑

报告一个测试情况:
dell笔记本,256Mb U盘,格式化为 FAT32 FDD 模式。驱动器号是 0x00 。
1. U盘插在笔记本插孔,使用最新官方版本 0.4.5c 及 0.4.6a(不加载 usb 驱动),均可启动 mydos.img 和 0PE.iso 。
2. U盘通过集线器插在笔记本插孔,使用最新官方版本 0.4.5c 及 0.4.6a(不加载 usb 驱动),进入命令行,执行 root,ls 命令正常。但是启动 mydos.img 和 0PE.iso 失败,提示磁盘读错误。再进入命令行,执行 root,ls 命令,同样提示磁盘读错误。
3. U盘通过集线器插在笔记本插孔,使用 292 楼 “第三个测试版,屏蔽掉多扇区读,完全用一个一个的扇区来读”,启动 mydos.img 成功,但是启动 0PE.iso ,加载完 155Mb 后,显示:
Chainloader (0xff)
Errar 25: Disk read errar
再进入命令行,执行 root,ls 命令正常。看来这一版本有很大改进。
4. 使用另外两个U盘,分别通过集线器插在笔记本插孔(一个分配驱动器号 0x00,一个分配驱动器号 0x80),使用最新官方版本 0.4.5c 及 0.4.6a(不加载 usb 驱动),启动 mydos.img 和 0PE.iso 都正常。

现象令人费解。

点评

292 楼的测试版有毛病,应该换成 294 楼的,就没问题了。294 楼的版本是 292 楼的改进版。  详情 回复 发表于 2013-12-12 18:14
回复

使用道具 举报

305#
发表于 2013-12-12 13:22:44 | 只看该作者
不点 发表于 2013-12-11 10:53
即使是 2000 年买的,也有可能是针对 grub 的攻击。早在 grub4dos 诞生之前,gnu grub 就一直是采用多扇区 ...
……到 2006 年,grub4dos 已经很有影响力了。微软在 XP SP2 中对 grub4dos 发动了一次致命的攻击。具体时间我记不很清了,大约也就在 2005-2006 年前后吧……

不点大师,知道g4d比较晚,但了解后很喜欢。不知道过去开发过程中的艰辛。微软作为一个大公司,g4d作为一个小微的、用途单一的小软件,对微软的生意不构成任何威胁,它为何要攻击G4D?g4d主要和bios打交道,微软不做BIOS,又是通过什么技术手段攻击G4D的?——因为喜欢g4d,所以想了解,包括曾经的挫折和艰辛。
向百折不屈的开发者致敬!
回复

使用道具 举报

306#
发表于 2013-12-12 18:00:04 | 只看该作者
这个版本,目的是彻底把明基笔记本的问题告一段落,请大家全面测试。

对于明基笔记本,需要在内置菜单的最开头添加 geometry --lba1sector (hd0) 命令。对于其他电脑,当然就不要添加这条命令了。

省略 (hd0) 也是可以的,那就自动把当前盘作为参数。

改动太多,难免不出问题。所以请大家都来测试,并快速反馈。

grub4dos-0.4.5c-2013-12-12.7z

265.08 KB, 下载次数: 12

大家都来试试,看有没有毛病?

回复

使用道具 举报

307#
发表于 2013-12-12 18:14:18 | 只看该作者
2011yaya2007777 发表于 2013-12-11 20:48
报告一个测试情况:
dell笔记本,256Mb U盘,格式化为 FAT32 FDD 模式。驱动器号是 0x00 。
1. U盘插在笔 ...

292 楼的测试版有毛病,应该换成  294 楼的,就没问题了。294 楼的版本是 292 楼的改进版。

回复

使用道具 举报

308#
发表于 2013-12-12 20:43:44 | 只看该作者
换成  294 楼的,成功启动 0PE 。

306楼测试:
1.  U盘通过集线器插在笔记本插孔,进入命令行,1BA ,不能自动加载菜单,命令行加载则清屏。手动输入命令,可以启动 0PE。
2.  U盘插在笔记本插孔(上一个U盘及另一个U盘),同上。
3.  U盘插在笔记本插孔,ud 分区,卡在  booting 'find /menu.lst 省略’  后
回复

使用道具 举报

309#
发表于 2013-12-13 08:31:05 | 只看该作者
本帖最后由 mygamexxx 于 2013-12-13 11:48 编辑

306楼测试:
明基笔记本,菜单未加参数。菜单第一项第一句加commandline。
启动成功,显示菜单,进入命令行,map --mem启动NATVIE格式XPPE成功。

联想台式机,菜单未加参数。菜单第一项第一句加commandline。
启动成功,显示菜单,进入命令行,map --mem启动0PE成功。
回复

使用道具 举报

310#
发表于 2013-12-13 16:22:12 | 只看该作者
本帖最后由 mygamexxx 于 2013-12-13 16:23 编辑

306楼测试发现的问题:

同样的命令,在菜单中执行, 启动不成功,命令行下手工输入,启动成功。
map --mem /boot/xppe.iso (0xff)
map --hook
chainloader (0xff)
boot
回复

使用道具 举报

311#
发表于 2013-12-13 16:27:54 | 只看该作者
本帖最后由 2011yaya2007777 于 2013-12-16 15:15 编辑

在联想台式机测试一下这个。如果失败,热重启再试;或者按 s 键试一试;或者换一个插孔试一试。
失败时等待9秒,可以把调试数字抄下来。
有可能 usb 键盘、鼠标不能使用,菜单设置成默认的。
回复

使用道具 举报

312#
发表于 2013-12-13 18:47:40 | 只看该作者
好了,弄了一天一夜,终于找到毛病。另外,今天的版本还让 ud 盘在 map 下也能正常访问。

试试看怎么样?还有没有新、旧问题?

grub4dos-0.4.5c-2013-12-13.7z

268.83 KB, 下载次数: 4

改动很大,请大家全面测试

回复

使用道具 举报

313#
发表于 2013-12-13 19:51:44 | 只看该作者
不点大人注意保重身体。
以前听说,老外正在码程序,一个单词还有几个字母没敲完,下班铃声响起,手马上一抬,下班了,明天再继续。
回复

使用道具 举报

314#
发表于 2013-12-13 20:21:38 | 只看该作者
ud 启动,卡在 configfile /boot/grub/menu.lst 后
回复

使用道具 举报

315#
发表于 2013-12-13 20:38:06 | 只看该作者
preset menu 第一行有没有加上 geometry --lba1sector 命令?

回复

使用道具 举报

316#
发表于 2013-12-13 21:19:16 | 只看该作者
本来是卡在内置菜单的 booting 'find /menu.lst 省略’  后。重启后按 c 键进入命令行, 键入 configfile /boot/grub/menu.lst 后,又停滞。
回复

使用道具 举报

317#
发表于 2013-12-13 21:32:41 | 只看该作者
debug  on 打开调试信息,看看死在哪里?

执行过 geometry --lba1sector 了吗?如果没执行,记得执行它试试。

回复

使用道具 举报

318#
发表于 2013-12-13 21:36:23 | 只看该作者
本帖最后由 2011yaya2007777 于 2013-12-13 21:50 编辑

加载了也是一样的。没加载也是按 1 扇区读的。
再试一试 debug on

打开调试没有任何提示。U盘指示灯大约 5 秒闪一下。
启动初始,显示信息 root(23,0)。是否应当为 (23)?
回复

使用道具 举报

319#
发表于 2013-12-13 21:50:00 | 只看该作者
本帖最后由 不点 于 2013-12-13 21:56 编辑

恶意 bios 攻击,只要碰一次多扇区读,即可造成永久性 bios 紊乱。

怀疑 fbinst 启动期间,可能以某种方式碰了多扇区读。

必须一开始就执行 geometry --lba1sector 命令,防止去尝试 127 扇区的 probing。一碰就死。

如果在 fbinst 期间已经执行了多扇区读,那就没办法了,必须修改 fbinst 才行。

回复

使用道具 举报

320#
发表于 2013-12-13 21:57:15 | 只看该作者
我现在测试的U盘(ud分区),是可以多扇区读的。使用新的测试用的 grldr ,也是按 1 扇区读的,表现如上。

真正不能正常启动的是另一个U盘,是再串一个集线器启动,但是使用新的测试用的 grldr ,现在可以启动了,只是慢。
回复

使用道具 举报

321#
发表于 2013-12-13 22:01:55 | 只看该作者
本帖最后由 不点 于 2013-12-13 22:05 编辑

启动显示 (23),ud 失败?奇怪。在别的电脑是否正常?

如果你有测试条件,你来排解一下吧,我太累了,脑子不够用了。


回复

使用道具 举报

322#
发表于 2013-12-13 22:17:38 | 只看该作者
我现在测试的U盘(ud分区),是可以多扇区读的。使用新的测试用的 grldr ,也是按 1 扇区读的,表现如上。真正不能正常启动的是另一个U盘,是再串一个集线器启动,但是使用新的测试用的 grldr ,现在可以启动了,只是慢。


探测多扇区读,只探测了 127 扇区的情况,其他情况未探测。你在 DOS 下用 debug 汇编,确认一下,到底能否读出 127 扇区?

回复

使用道具 举报

323#
发表于 2013-12-14 08:46:58 | 只看该作者
仔细检查了代码,没有发现什么地方可以更改 install_partition 为 0x00FFFF。它的默认值是 0xFFFFFF,代表没有分区表的整个盘。

莫非 fbinst 的代码在传递分区信息的时候,弄错了?

回复

使用道具 举报

324#
发表于 2013-12-14 09:07:17 | 只看该作者
貌似找到问题了,grldr 自己的启动代码(在第二个扇区)会把 DH 的值作为分区的号码。

从 fbinst 启动 grldr 时,fbinst 执行了 xor dh, dh 把 DH 清零,同时我猜,bean 是把原始的 BIOS 盘号传给了 DL。

但也许后来 chenall 或者其他人,又把启动盘的盘号改成了 ud 的盘号,变成 DL=23h 了(这有待验证)。

所以就成了目前这个异常的状况了。

死机的直接原因,可能是把 0x23 当作普通软盘去访问,所以 bios 死机了。

回复

使用道具 举报

325#
发表于 2013-12-14 09:23:38 | 只看该作者
312楼测试:
明基笔记本
命令行下输入命令,启动XPPE成功。
菜单下,已加参数,在cahinloader (0xff)  ,boot 后,返回Error 25:Disk read error
回复

使用道具 举报

326#
发表于 2013-12-14 09:30:16 | 只看该作者
果然,chenall 改成这样了:

  1. boot_grldr:
  2. movb $2, gdt_dst_hi1
  3. call load_file
  4. call setup_mbr
  5. movb $0x23,%dl
  6. push %dx
  7. ljmp $0x2000, $0

复制代码


修改了 DL 却忘了把 DH 赋值为 FFh。

无论如何,我目前认为像上面这样做很不安全。我认为 bean 原来的做法是比较好的。

bean 把分区号设置为 00,这也可能遇到问题。但正如在 dos 下启动 grub.exe 那样,根本不知道是否存在分区 0,所以,也就不算是问题了。

怎么样解决这些问题呢?以下是我的看法。

识别 ud 的工作应该在 grldr 内部完成,而不应该在 fbinst 里面完成。进入 grldr 时,应该保持 DL = 原始的 bios 传递过来的盘号,而 DH 保持为 0 也是可以的。但谁能保证分区 0 是可以访问的?位于 8M 以后的分区 0 的第一扇区访问,就有可能产生死机了。所以,安全起见,还是应该设置分区号为 FFh,代表整个磁盘。

当然,fbinst 设置为分区 DH=0,也就没什么关系了,chenall 设置为 DL=0x23 也没关系,反正我们接下来要在 grldr 内部重新设置,覆盖掉 fbinst 的设置。

我们现在就根据 fb_status 的值来在 grldr 内部的 common.c 里面强制设置 ud 的 boot_drive = 0x23,以及 install_partition=0xFFFFFF 即可。

马上准备按照这个思路来编译一个版本。

回复

使用道具 举报

327#
发表于 2013-12-14 10:07:39 | 只看该作者
本帖最后由 mygamexxx 于 2013-12-14 10:09 编辑

311楼测试:
联想台式机:
加载USB驱动,未按S键:


加载USB驱动,按S键:


回复

使用道具 举报

328#
发表于 2013-12-14 10:09:51 | 只看该作者
本帖最后由 不点 于 2013-12-14 14:37 编辑

好的,这个版本在 fbinst 启动时,强制 boot_drive=0x23 以及 install_partition=0xFFFFFF。

大大小小的问题,是不是都消失了?都试试看。
回复

使用道具 举报

329#
发表于 2013-12-14 10:22:22 | 只看该作者
本帖最后由 不点 于 2013-12-14 10:23 编辑
312楼测试:
明基笔记本
命令行下输入命令,启动XPPE成功。
菜单下,已加参数,在cahinloader (0xff)  ,boot 后,返回Error 25:Disk read error


我猜你肯定搞错了。你是个大忙人,什么测试都靠你,你忙得不亦乐乎,难免阴差阳错。

你要明白,读出扇区是最要紧的。前面你已经证明,我们可以读出扇区了。

后来你说的 chainloader (0xff) 出错,这个 (0xff) 在内存里面,根本不应该出错。如果出错,也是在 grub4dos 开发者管辖范围内,是可以控制的。这不像 bios,因为 bios 根本就不可控制。

我怀疑你把版本搞错了。

回复

使用道具 举报

330#
发表于 2013-12-14 12:39:25 | 只看该作者
刚刚又发现一个毛病,修正了。

grub4dos-0.4.5c-2013-12-14.7z

269.11 KB, 下载次数: 3

再修正,请测试

点评

330楼测试: 菜单启动XPPE成功。 内置菜单如下:  详情 回复 发表于 2013-12-14 13:17
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-27 02:06

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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