无忧启动论坛

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

支持含有碎片的文件仿真

    [复制链接]
841#
发表于 2015-2-4 13:12:18 | 只看该作者
@yaya

有报告0.4.6a的grldr.mbr出问题的(报告说换成0.4.5c正常)

信息在截图中了.汇编的我看不出是哪里的问题,你有空的时候看下.

Unnamed.png (1.19 KB, 下载次数: 243)

Unnamed.png

Unnamed1.png (38.96 KB, 下载次数: 234)

Unnamed1.png
回复

使用道具 举报

842#
发表于 2015-2-4 13:27:58 | 只看该作者
Try (hd1) 就有问题,没显示分区号,不正常。因此,代码需要继续锤炼。

回复

使用道具 举报

843#
 楼主| 发表于 2015-2-4 20:26:12 | 只看该作者
可否把 (hd1) 的 MBR 及 (hd1,0) 的 PBR 截图上传?

点评

用diskgenius备份出来的分区表信息.  详情 回复 发表于 2015-2-5 08:58
回复

使用道具 举报

844#
发表于 2015-2-5 08:58:32 | 只看该作者
2011yaya2007777 发表于 2015-2-4 20:26
可否把 (hd1) 的 MBR 及 (hd1,0) 的 PBR 截图上传?

用diskgenius备份出来的分区表信息.

FileRecv.rar

3.09 KB, 下载次数: 4

回复

使用道具 举报

845#
 楼主| 发表于 2015-2-5 20:27:11 | 只看该作者
是想看到出错硬盘的真正的 MBR。

点评

1.ptf用winhex打开,第二个扇区的内容就是对应(hd1)的MBR  详情 回复 发表于 2015-2-5 21:53
回复

使用道具 举报

846#
 楼主| 发表于 2015-2-5 20:36:13 | 只看该作者
那你就跟踪一下,看看什么地方的漏洞导致 S 和 H 探测出现重大错误。

0.4.6a 可以探测到 exfat 有 bpb,因此从 bpb 获取 H/S 参数。但是 H/S=0/0,所以产生错误。
位于 common.c 的init_bios_info 函数。
修正已经上传。
回复

使用道具 举报

847#
发表于 2015-2-5 21:53:55 | 只看该作者
2011yaya2007777 发表于 2015-2-5 20:27
是想看到出错硬盘的真正的 MBR。

1.ptf用winhex打开,第二个扇区的内容就是对应(hd1)的MBR
回复

使用道具 举报

848#
 楼主| 发表于 2015-2-8 17:53:54 | 只看该作者
有报告0.4.6a的grldr.mbr出问题的

已经修正,上传管网。

点评

报告成功.  发表于 2015-2-10 08:45
Well, after many tests, it seems that the MBR/PBR from the latest 0.4.6a versions is buggy. The MBR is having problems finding GRLDR on partitions with file system type NTFS and displaying error me  详情 回复 发表于 2015-2-9 22:31
辛苦了,我让他再测试一下看看  详情 回复 发表于 2015-2-9 10:08
回复

使用道具 举报

849#
发表于 2015-2-9 10:08:39 | 只看该作者
2011yaya2007777 发表于 2015-2-8 17:53
已经修正,上传管网。

辛苦了,我让他再测试一下看看
回复

使用道具 举报

850#
发表于 2015-2-9 17:25:55 | 只看该作者
本帖最后由 mdyblog 于 2015-2-9 21:45 编辑

反应个现象。
为什么GRUB4DOS访问盘末尾是出现 “不支持LBA64”?
盘才64G, 32位LBA 地址就够了。

访问磁盘尾部的6M系统, 如图:



----------------补充测试----------------------
当尾部系统增加到8M时问题显示有不同。


----------------补充测试----------------------
当尾部系统增加到8.065M时问题显示有不同。没有任何提示,就是菜单读不出来。



----------------补充测试----------------------
当尾部系统增加到8.125M时就没问题了。菜单显示出来了。






1:U盘分区表
磁盘:1
  磁盘信息 磁盘号   大小(字节)         柱面数 磁头数 扇数 扇区 媒体     签名 总线
              1    63786975232           7754    255   63  512   12 55276D56  7 MBR F
  字符说明 激活 __本分区起始__ 分区 __本分区结束__ _______本分区______ ______本分区_______
  激活为0x80    磁头_扇区_柱面 类型 磁头_扇区_柱面 _____起始扇区号____ _____扇区总数______
  主分区1: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
  主分区2: 0x00 0xFE 0xFF 0xFF 0x0F 0xFE 0xFF 0xFF 0x69 0xB4 0xE0 0x01 0x54 0xE6 0xC1 0x03
  主分区3: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
  主分区4: 0x00 0x00 0x02 0x00 0xFE 0x00 0x02 0x00 0x01 0x00 0x00 0x00 0x01 0x00 0x00 0x00
  标志   : 0x55 0xAA
  全部分区: -1  @2  -3  1   2   3
  分区  类型 激活(1) 起始(字节)     长度(字节)    隐藏扇区     结尾(字节) 物理# 盘符
    -1  0x00   0              0              0           0              0    1   
    @2  0x0F   0    16129774080    32275998720    31503465    48405772800    2   
    -3  0x00   0              0              0           0              0    3   
     1  0xFE   0            512            512           1           1024    4   
     2  0x0B   0    16129806336    16137967104          63    32267773440    5  G:
     3  0x0B   0    32267805696    16137967104          63    48405772800    6  H:

2:尾部的6M系统不在分区表中(深度隐藏的)

map --in-situ (hd0)XX+YY (hd0)
...
来映射的虚拟磁盘。


3:可能是QEMU虚拟机的问题。
62291968K /63s /255 = 7754.99134765017
不是整数 个 柱面,
最后的零碎: 62291968K - 7754. * 63s * 255 = 8154112 = 7.7763671875M    (一个柱面7.84423828125M < 8M)
和上面的测试比较接近, 但相差0.3486 M   

-----------------后续----------------
“相差0.3486 M”可能是grldr-文的空间, 将menu.lst 挤到到后面了。
只留menu.lst, 7.85M
测试i通过。如图:



这恰好对应 后面那个柱面零碎。


点评

出错信息是 qemu 的主板 BIOS 发出的,不是 grub4dos 发出的。 1、试试 0.4.5,看看是否有相同的问题,方便开发者追踪问题的根源。 2、盘上的分区表是否不正常?假如分区起始扇区号为 0xFFFFFFFF,分区长度为 0x  详情 回复 发表于 2015-2-9 17:43
回复

使用道具 举报

851#
发表于 2015-2-9 17:43:06 | 只看该作者
mdyblog 发表于 2015-2-9 17:25
反应个现象。
为什么GRUB4DOS访问盘末尾是出现 “不支持LBA64”?
盘才64G, 32位LBA 地址就够了。

出错信息是 qemu 的主板 BIOS 发出的,不是 grub4dos 发出的。

1、试试 0.4.5,看看是否有相同的问题,方便开发者追踪问题的根源。
2、盘上的分区表是否不正常?假如分区起始扇区号为 0xFFFFFFFF,分区长度为 0xFFFFFFFF,那么这就可能超出 32 位的范围,需要访问 64 位的扇区号了。

to 开发者:

用跟踪调试等手段检查代码,看看什么代码导致 64 位的扇区号被传入主板 BIOS int13,造成问题。
回复

使用道具 举报

852#
发表于 2015-2-9 17:50:47 | 只看该作者
不点 发表于 2015-2-9 17:43
出错信息是 qemu 的主板 BIOS 发出的,不是 grub4dos 发出的。

1、试试 0.4.5,看看是否有相同的问题 ...

1:U盘分区表
磁盘:1
  磁盘信息 磁盘号   大小(字节)         柱面数 磁头数 扇数 扇区 媒体     签名 总线
              1    63786975232           7754    255   63  512   12 55276D56  7 MBR F
  字符说明 激活 __本分区起始__ 分区 __本分区结束__ _______本分区______ ______本分区_______
  激活为0x80    磁头_扇区_柱面 类型 磁头_扇区_柱面 _____起始扇区号____ _____扇区总数______
  主分区1: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
  主分区2: 0x00 0xFE 0xFF 0xFF 0x0F 0xFE 0xFF 0xFF 0x69 0xB4 0xE0 0x01 0x54 0xE6 0xC1 0x03
  主分区3: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
  主分区4: 0x00 0x00 0x02 0x00 0xFE 0x00 0x02 0x00 0x01 0x00 0x00 0x00 0x01 0x00 0x00 0x00
  标志   : 0x55 0xAA
  全部分区: -1  @2  -3  1   2   3
  分区  类型 激活(1) 起始(字节)     长度(字节)    隐藏扇区     结尾(字节) 物理# 盘符
    -1  0x00   0              0              0           0              0    1   
    @2  0x0F   0    16129774080    32275998720    31503465    48405772800    2   
    -3  0x00   0              0              0           0              0    3   
     1  0xFE   0            512            512           1           1024    4   
     2  0x0B   0    16129806336    16137967104          63    32267773440    5  G:
     3  0x0B   0    32267805696    16137967104          63    48405772800    6  H:

2:尾部的6M系统不在分区表中(深度隐藏的)

map --in-situ (hd0)XX+YY (hd0)
...
来映射的虚拟磁盘。
回复

使用道具 举报

853#
发表于 2015-2-9 20:23:23 | 只看该作者
本帖最后由 不点 于 2015-2-9 20:34 编辑

刚刚想到,你也是开发者,你也可以直接调试。

扩展分区里面的逻辑分区表,如果有毛病,照样有可能引起死机。比如,错误地指向了一个很大的扇区号,造成问题。



补充:确实如你所说,有可能是 qemu 自身 bios 的毛病,比如说,它在读取尾部的扇区时,自己出现了 bug。

你可以试试别的虚拟机,如果别的虚拟机没毛病,那就可以确定是 qemu 的毛病了。






回复

使用道具 举报

854#
发表于 2015-2-9 22:31:13 | 只看该作者
2011yaya2007777 发表于 2015-2-8 17:53
已经修正,上传管网。

Well, after many tests, it seems that the MBR/PBR from the latest 0.4.6a versions is buggy.
The MBR is having problems finding GRLDR on partitions with file system type <> NTFS and displaying error messages.
And half of the PBR's are not booting.
In the same testing conditions the MBR/PBR from 0.4.5c and the one from 0.4.6a BOOTICE version are booting ok (except for exFAT ofcourse).

In this situation there is not much I can do but wait for yaya to fix it...
英文我不怎么看的懂,他的意思,0.46a还是有问题吗?
http://reboot.pro/topic/20238-im ... ws-and-linux/page-6
回复

使用道具 举报

855#
发表于 2015-2-10 08:53:32 | 只看该作者
这里又有报告0.4.6a的问题的

https://github.com/chenall/grub4dos/issues/37

点评

这个报告依旧显示 try (hd0),没有正常显示分区号。因此 0.4.6 仍然含有逻辑错误。  详情 回复 发表于 2015-2-10 11:52
回复

使用道具 举报

856#
发表于 2015-2-10 09:44:34 | 只看该作者
http://reboot.pro/topic/20238-im ... ws-and-linux/page-6
grubinst-gui的中文语言文件还是旧的,不适合这个修改过的新版本了。不知道谁可以更新一下那个语言文件
回复

使用道具 举报

857#
发表于 2015-2-10 11:52:11 | 只看该作者
chenall 发表于 2015-2-10 08:53
这里又有报告0.4.6a的问题的

https://github.com/chenall/grub4dos/issues/37

这个报告依旧显示 try (hd0),没有正常显示分区号。因此 0.4.6 仍然含有逻辑错误。
回复

使用道具 举报

858#
 楼主| 发表于 2015-2-10 21:25:12 | 只看该作者
本帖最后由 2011yaya2007777 于 2015-2-25 10:25 编辑
这个报告依旧显示 try (hd0),没有正常显示分区号。因此 0.4.6 仍然含有逻辑错误。

点评

你可以贴在报告问题的那个网站上。或者你就直接提交修改后的编译结果,那些高手们都是每天下载最新版测试的,他们很敬业。  详情 回复 发表于 2015-2-11 11:46
回复

使用道具 举报

859#
发表于 2015-2-11 10:11:47 | 只看该作者
请问这个现在在哪儿?
---------------------------------------------------------
目前可以使用的函数和变量:
http://grubutils.googlecode.com/svn/trunk/src/include/grub4dos.h
----------------------------------------------------------

点评

应该还在GitHub  详情 回复 发表于 2015-2-11 10:23
回复

使用道具 举报

860#
发表于 2015-2-11 10:23:43 | 只看该作者
mdyblog 发表于 2015-2-11 10:11
请问这个现在在哪儿?
---------------------------------------------------------
目前可以使用的函数 ...

应该还在GitHub
回复

使用道具 举报

861#
 楼主| 发表于 2015-2-11 11:14:49 | 只看该作者
请教 chenall :
如果在一天内修正 2 个 bug,又不想把补丁混在一起,是否应当这样操作:
1. 同步(更新)补丁代码,保持和主项目代码一致。
   git fetch grub4dos
2. 切换到 0.4.6a
   git checkout grub4dos/0.4.6a -b 0.4.6a
3. 同步(更新)本地库,保持和主项目代码一致
   git rebase grub4dos/0.4.6a
4. 打补丁1
5. 在 commit.log 写提交信息
   .修正 bug1
6. 提交本地修改信息
   git commit -a -F /mnt/cofs/commit.log
7. 上传新的分支
   git push origin 0.4.6a
8. 同步(更新)补丁代码,保持和主项目代码一致。
   git fetch grub4dos
9. 切换到 0.4.6a
   git checkout grub4dos/0.4.6a -b 0.4.6a
10. 同步(更新)本地库,保持和主项目代码一致
   git rebase grub4dos/0.4.6a
11. 打补丁2
5. 在 commit.log 写提交信息
   .修正 bug2
6. 提交本地修改信息
   git commit -a -F /mnt/cofs/commit.log
7. 上传新的分支
   git push
  

点评

1. 同步(更新)补丁代码,保持和主项目代码一致。 git fetch grub4dos 2. 切换到 0.4.6a git checkout grub4dos/0.4.6a -b 0.4.6a 3. 同步(更新)本地库,保持和主项目代码一致 git rebase grub4dos/0.4  详情 回复 发表于 2015-2-11 11:26
回复

使用道具 举报

862#
发表于 2015-2-11 11:26:48 | 只看该作者
本帖最后由 chenall 于 2015-2-11 11:29 编辑
2011yaya2007777 发表于 2015-2-11 11:14
请教 chenall :
如果在一天内修正 2 个 bug,又不想把补丁混在一起,是否应当这样操作:
1. 同步(更新) ...


1. 同步(更新)补丁代码,保持和主项目代码一致。
   git fetch grub4dos
2. 切换到 0.4.6a
   git checkout 0.4.6a
3. 同步(更新)本地库,保持和主项目代码一致
   git rebase grub4dos/0.4.6a
4. 打补丁1并提交(只是commit)
git commit
5. 打补丁2同上
git commit
6.打补丁N...同上

7. 确定修改没有问题之后就可以git push

这样子的话所有的补丁都是分开的,但是最终只会自动编译最后一个版本.(每次git push都会生成一个版本的)

同一天有多个补丁,最好还是一起补上,最后再一起push.


回复

使用道具 举报

863#
发表于 2015-2-11 11:46:51 | 只看该作者
2011yaya2007777 发表于 2015-2-10 21:25
请测试:http://bbs.wuyou.net/forum.php?mod=attachment&aid=MjA5MjI2fGM5NGI3YjhkNzVkNjBmMDc2NjhjMjU4N2YyOGFiYmM1fDE3NTA1NDMxODY%3D&request=yes&_f=.7z

你可以贴在报告问题的那个网站上。或者你就直接提交修改后的编译结果,那些高手们都是每天下载最新版测试的,他们很敬业。

回复

使用道具 举报

864#
 楼主| 发表于 2015-2-11 11:54:53 | 只看该作者
链接已经贴在报告问题的那个网站上。那个网站不能上传文件。这个链接不需要登录就能下载。
回复

使用道具 举报

865#
发表于 2015-2-11 14:21:15 | 只看该作者
本帖最后由 mdyblog 于 2015-2-11 16:05 编辑

请问 C写的外置命令中怎
调用
#define builtin_cmd ((int (*)(char *cmd , const char *arg, int flags))((*(int **)0x8300)[44]))
//        .long        ABS(EXT_C(builtin_cmd))  //44

1: flags 怎么填, 统一填0可以吗?

2: cmd需要在 arg 的前部重复吗?

比如要执行【ls (hd0,0)】
builtin_cmd ((char*)"ls", "(hd0,0)",0);
还是
builtin_cmd ((char*)"ls", "ls (hd0,0)",0);


点评

建议看看这些函数的原来的函数的定义。这些函数都是指向内部的某个函数,它们的定义在 asm.S 文件的结尾处。flags 与内部函数的 flags 的意义是一样的,大多数情况下,函数体内部的处理过程都忽略 flags 的值,但也  详情 回复 发表于 2015-2-11 14:40
回复

使用道具 举报

866#
发表于 2015-2-11 14:40:43 | 只看该作者
mdyblog 发表于 2015-2-11 14:21
请问 C写的外置命令中怎
调用
#define builtin_cmd ((int (*)(char *cmd , const char *arg, int flags)) ...

建议看看这些函数的原来的函数的定义。这些函数都是指向内部的某个函数,它们的定义在 asm.S 文件的结尾处。flags 与内部函数的 flags 的意义是一样的,大多数情况下,函数体内部的处理过程都忽略 flags 的值,但也有少数例外。

点评

1: builtin_cmd 比较特别, 不是实际要运行的函数, 只是一个“壳”。 在 源代码中兜圈。 所以 来问问。 2: 我文的是2个问题。 山脉只涉及一个。 3: 我需要具体的答案。 比如 【ls (hd0,0)/】 bu  详情 回复 发表于 2015-2-11 15:25
回复

使用道具 举报

867#
发表于 2015-2-11 14:50:58 来自手机 | 只看该作者
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=361527
这个里面的问题用不写盘的方法怎么弄?
回复

使用道具 举报

868#
发表于 2015-2-11 15:25:40 | 只看该作者
本帖最后由 mdyblog 于 2015-2-11 16:02 编辑
不点 发表于 2015-2-11 14:40
建议看看这些函数的原来的函数的定义。这些函数都是指向内部的某个函数,它们的定义在 asm.S 文件的结尾 ...


1:  builtin_cmd 比较特别, 不是实际要运行的函数, 只是一个“壳”。
在 源代码中兜圈。
所以 来问问。

2: 我问的是2个问题。
上面只涉及一个。


3: 我需要具体的答案。
比如 【ls  (hd0,0)/】
builtin_cmd  怎么写。

不是 一些 “空泛”的指导——那些我懂的。
实际中碰到具体问题, 就希望 “具体” 的答案。

点评

你可以看一下builtin_cmd的源码就明白了.  详情 回复 发表于 2015-2-11 15:48
回复

使用道具 举报

869#
发表于 2015-2-11 15:48:19 | 只看该作者
本帖最后由 chenall 于 2015-2-11 15:53 编辑
mdyblog 发表于 2015-2-11 15:25
1:  builtin_cmd 比较特别, 不是实际要运行的函数, 只是一个“壳”。
在 源代码中兜圈。

所以 来问 ...


通过flags可能识别命令运行环境,比如是在菜单中的或者是在命令行的,大部份命令是不管这个flags参数的,但少数有判断,这个不能为0.

外部命令的话参数里面就有一个flags参数是同一个意思,直接用这个flags代入就行了.

其它的你可以看一下builtin_cmd的源码就明白了,不看源码可能无法明白真正的用法.

最简单的就用就是如参数介绍所说的.

很直观的用法. 命令,参数,标志
(char *cmd , const char *arg, int flags)

builtin_cmd('ls','(hd0)',flags);

点评

我现在有个磁盘,他的0扇区有一个隐藏分区(FAT16)的bpb还有一个正常分区的分区表,分区表没有隐藏分区的表项,g4d怎么访问这个隐藏分区?  详情 回复 发表于 2015-2-11 16:33
非常感谢!!  详情 回复 发表于 2015-2-11 15:56
回复

使用道具 举报

870#
发表于 2015-2-11 15:56:42 | 只看该作者
chenall 发表于 2015-2-11 15:48
通过flags可能识别命令运行环境,比如是在菜单中的或者是在命令行的,大部份命令是不管这个flags参数的, ...

非常感谢!!
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-6-22 05:59

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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