无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: 2011yaya2007777
打印 上一主题 下一主题

支持含有碎片的文件仿真

    [复制链接]
481#
发表于 2014-11-15 11:12:31 | 只看该作者
mdyblog 发表于 2014-11-15 10:37
直接 做个Mini测试包(19M) 给你们测试吧, 比码字强多了。
链接: http://pan.baidu.com/s/1bnjdvaR 密 ...

这个后面的map (hd1) (hd2)是多余的.

你这些命令执行之后第一条命令map (hd0,0)/HD.IMG  (hd0)是没有作用的.
被  map --in-situ (hd1,0)/PE.IMG  (hd0)覆盖了.

另外你这些命令执行最后的结果就是hd0和hd1,hd2都是一模一样的,除了hd0的MBR不一样,其它的都是一样的.

这种情况windows是不允许的.




点评

>>你这些命令执行之后第一条命令map (hd0,0)/HD.IMG (hd0)是没有作用的. >>被 map --in-situ (hd1,0)/PE.IMG (hd0)覆盖了. 对下面修改的菜单, 还能这么说吗? title TwoStepNew:FAIL map (hd0,0)/  详情 回复 发表于 2014-11-15 11:43
title TwoStep:FAIL map (hd0,0)/HD.IMG (hd0) map (hd0) (hd1) map --rehook root (hd0,1) map --in-situ (hd1,0)/PE.IMG (hd0) map (hd0) (hd2) map --rehook root (hd0,0) chainloader /nt  详情 回复 发表于 2014-11-15 11:21
>>这个后面的map (hd1) (hd2)是多余的. 哦, 写错了个数字,应该是: 我在测试下.  详情 回复 发表于 2014-11-15 11:19
回复

使用道具 举报

482#
发表于 2014-11-15 11:16:56 | 只看该作者
不点 发表于 2014-11-15 11:07
请等待我给菜单加说明。

菜单我明白, 就是我写的。
1) 就是 map -status 输出的那几行映射表, 看不明白。

2) 为是  TWOStep 不能启动。
   都是 “正常”的用法。

点评

map --status 显示信息里面,关键的几个指标是 Fr ------- 表示创建的虚拟盘的盘号。 To ------ 表示究竟是在哪个真实盘上创建这个虚拟盘的。 start sector ------ 表示用于创建虚拟盘的起始扇区号,这是  详情 回复 发表于 2014-11-15 11:55
回复

使用道具 举报

483#
发表于 2014-11-15 11:19:39 | 只看该作者
本帖最后由 mdyblog 于 2014-11-15 11:45 编辑
chenall 发表于 2014-11-15 11:12
这个后面的map (hd1) (hd2)是多余的.

你这些命令执行之后第一条命令map (hd0,0)/HD.IMG  (hd0)是没有 ...


>>这个后面的map (hd1) (hd2)是多余的.

哦, 写错了个数字,应该是:
  1. map (hd0) (hd2)
复制代码

我在测试下.

menu.7z

290 Bytes, 下载次数: 0

回复

使用道具 举报

484#
发表于 2014-11-15 11:21:57 | 只看该作者
chenall 发表于 2014-11-15 11:12
这个后面的map (hd1) (hd2)是多余的.

你这些命令执行之后第一条命令map (hd0,0)/HD.IMG  (hd0)是没有 ...


title TwoStepNew:FAIL
        map (hd0,0)/HD.IMG  (hd0)
        map (hd0)  (hd1)
        map --rehook
        root (hd0,1)
        map --in-situ (hd1,0)/PE.IMG  (hd0)
        map (hd0)  (hd2)
        map --rehook
        root (hd0,0)
        chainloader /ntldr
        boot
还是 失败:

点评

简化一下就不会有问题了. map (hd0,0)/HD.IMG (hd2) map --in-situ (hd0,0)/PE.IMG (hd0) map (hd0) (hd1) map --rehook chainloader (hd0,0)/ntldr boot  详情 回复 发表于 2014-11-15 11:46
你这个 hd2 又变成hd.img的虚拟克隆盘了。你贴出 map --status,应该与上次不同。 如果相同,那就是 bug 了。试试 0.4.5 和 0.4.6 是否一样?  详情 回复 发表于 2014-11-15 11:40
回复

使用道具 举报

485#
发表于 2014-11-15 11:40:14 | 只看该作者
map 命令有bug,

map --in-situ (hd1,0)/PE.IMG  (hd0)
map (hd0)  (hd2)

两条命令换一下位置就行了.
map (hd0)  (hd2)
map --in-situ (hd1,0)/PE.IMG  (hd0)

估计是MAP命令里面有逻辑错误.

点评

这样 的确可以了。 [attachimg]203184[/attachimg] [attachimg]203183[/attachimg]  详情 回复 发表于 2014-11-15 11:57
》》 map 命令有bug, map --in-situ (hd1,0)/PE.IMG (hd0) map (hd0) (hd2) 两条命令换一下位置就行了. map (hd0) (hd2) map --in-situ (hd1,0)/PE.IMG (hd0) 估计是MAP命令里面有逻辑错误. ----  详情 回复 发表于 2014-11-15 11:46
回复

使用道具 举报

486#
发表于 2014-11-15 11:40:41 | 只看该作者
mdyblog 发表于 2014-11-15 11:21
title TwoStepNew:FAIL
        map (hd0,0)/HD.IMG  (hd0)
        map (hd0)  (hd1)

你这个 hd2 又变成hd.img的虚拟克隆盘了。你贴出 map --status,应该与上次不同。

如果相同,那就是 bug 了。试试 0.4.5 和 0.4.6 是否一样?
回复

使用道具 举报

487#
发表于 2014-11-15 11:43:22 | 只看该作者
chenall 发表于 2014-11-15 11:12
这个后面的map (hd1) (hd2)是多余的.

你这些命令执行之后第一条命令map (hd0,0)/HD.IMG  (hd0)是没有 ...

>>你这些命令执行之后第一条命令map (hd0,0)/HD.IMG  (hd0)是没有作用的.
>>被  map --in-situ (hd1,0)/PE.IMG  (hd0)覆盖了.

对下面修改的菜单, 还能这么说吗?
title TwoStepNew:FAIL
        map (hd0,0)/HD.IMG  (hd0)
        map (hd0)  (hd1)
        map --rehook
        root (hd0,1)
        map --in-situ (hd1,0)/PE.IMG  (hd0)
        map (hd0)  (hd2)
        map --rehook
        root (hd0,0)
        chainloader /ntldr
        boot

我的本意是;
    前面 某人 HD.IMG  =》(hd0)  , (hd0) =>(hd1) 了。
    现在转到我的程序,
我想 PE.IMG  =》(hd0),  (hd0) 还要保留
(hd0) 为什么要保留, 一般来说, (hd0) 是原始磁盘,不能丢,后来还需要原始磁盘的信息。

》》另外你这些命令执行最后的结果就是hd0和hd1都是一模一样的,除了hd0的MBR不一样,其它的都是一样的.
我也发现这个奇怪的问题?
发现 (hd0) (hd1) (hd2) 一样。 为什么这么怪?





-------------------------
下面的菜单可以启动,也是两步。
title TwoStepX:OK
        map (hd0,0)/HD.IMG  (hd1)
        map --rehook
        map --in-situ (hd0,0)/PE.IMG  (hd0)
        map (hd0)  (hd2)
        map --rehook
        root (hd0,0)
        chainloader /ntldr
        boot
看来, 可以map 多个, 即使一样也可以启动。
这个只是对比。
不同的是中间过程,2个分片虚拟盘都是 直接 从原始磁盘上映射。
2步法X: (hd0):p1  --> (hd1)
                (hd0):p2  -->  (hd0)
                     (hd0)-->(hd2)

2步法: (hd0):p1  --> 中间(hd0)
                     (hd0)-->New(hd1)
                                                         New (hd1):p2  -->  (hd0)
                                                          中间(hd0)-->(hd2)

2步法 就是 中间转了个圈, 结果转糊涂了。


分片模拟盘  本地硬盘(R-hd0)
2步法X:hd0=R-hd0-片1        hd1=1R-hd0-片2hd2=R-hd0
2步法:hd0=R-hd0-片1        hd1=1R-hd0-片2hd2=R-hd0
1步法:hd0=R-hd0-片2hd1=R-hd0




回复

使用道具 举报

488#
发表于 2014-11-15 11:46:00 | 只看该作者
mdyblog 发表于 2014-11-15 11:21
title TwoStepNew:FAIL
        map (hd0,0)/HD.IMG  (hd0)
        map (hd0)  (hd1)

简化一下就不会有问题了.
       map (hd0,0)/HD.IMG  (hd2)
       map --in-situ (hd0,0)/PE.IMG  (hd0)
        map (hd0)  (hd1)
        map --rehook
        chainloader (hd0,0)/ntldr
        boot

点评

你这是 必须是一步到位。 现在 程序是 分两部运行的。 map HD.IMG 才能 知道 后面要干 第2步的工作。 因为ms 启动硬盘 必须为(hd0), 不能(hd2), 所以只能 map HD.IMG 到(hd0) (hd0) 再留到 (hd1)  详情 回复 发表于 2014-11-15 11:50
回复

使用道具 举报

489#
发表于 2014-11-15 11:46:37 | 只看该作者
chenall 发表于 2014-11-15 11:40
map 命令有bug,

map --in-situ (hd1,0)/PE.IMG  (hd0)

》》
map 命令有bug,

map --in-situ (hd1,0)/PE.IMG  (hd0)
map (hd0)  (hd2)

两条命令换一下位置就行了.
map (hd0)  (hd2)
map --in-situ (hd1,0)/PE.IMG  (hd0)

估计是MAP命令里面有逻辑错误.
----
我试试。
回复

使用道具 举报

490#
发表于 2014-11-15 11:50:11 | 只看该作者
chenall 发表于 2014-11-15 11:46
简化一下就不会有问题了.
       map (hd0,0)/HD.IMG  (hd2)
       map --in-situ (hd0,0)/PE.IMG  (h ...

你这是 必须是一步到位。

现在 程序是 分两部运行的。
map HD.IMG 才能 知道 后面要干 第2步的工作。
因为ms 启动硬盘 必须为(hd0), 不能(hd2), 所以只能   map HD.IMG  到(hd0)
(hd0) 再留到 (hd1)

回复

使用道具 举报

491#
发表于 2014-11-15 11:55:50 | 只看该作者
mdyblog 发表于 2014-11-15 11:16
菜单我明白, 就是我写的。
1) 就是 map -status 输出的那几行映射表, 看不明白。

map --status 显示信息里面,关键的几个指标是

Fr  ------- 表示创建的虚拟盘的盘号。
To  ------  表示究竟是在哪个真实盘上创建这个虚拟盘的。

start sector ------ 表示用于创建虚拟盘的起始扇区号,这是宿主真实盘上的起始扇区号。
sector count ----- 表示用于创建虚拟盘的扇区数目,这是指宿主真实盘上的扇区数目。

其它信息可以不用关注。

回复

使用道具 举报

492#
发表于 2014-11-15 11:57:36 | 只看该作者
chenall 发表于 2014-11-15 11:40
map 命令有bug,

map --in-situ (hd1,0)/PE.IMG  (hd0)

这样 的确可以了。
  1. title TwoStepNew3:
  2.         map (hd0)  (hd1)
  3.         map (hd0,0)/HD.IMG  (hd0)
  4.         map --rehook
  5.         root (hd0,1)
  6.         map (hd0)  (hd2)
  7.         map --in-situ (hd1,0)/PE.IMG  (hd0)
  8.         map --rehook
  9.         root (hd0,0)
  10.         chainloader /ntldr
  11.         boot
复制代码


回复

使用道具 举报

493#
发表于 2014-11-15 12:04:24 | 只看该作者
好的,chenall 干得不错,发现了问题。接下来你再试着排解错误。
回复

使用道具 举报

494#
发表于 2014-11-15 12:19:48 | 只看该作者
不点 发表于 2014-11-15 11:55
map --status 显示信息里面,关键的几个指标是

Fr  ------- 表示创建的虚拟盘的盘号。

是这样吗?
+63是第一分区的偏移。

点评

大致应该是这样的吧。  详情 回复 发表于 2014-11-15 12:39
回复

使用道具 举报

495#
发表于 2014-11-15 12:39:32 | 只看该作者
mdyblog 发表于 2014-11-15 12:19
是这样吗?
+63是第一分区的偏移。

大致应该是这样的吧。
回复

使用道具 举报

496#
发表于 2014-11-15 13:16:42 | 只看该作者
不点 发表于 2014-11-15 12:39
大致应该是这样的吧。

谢谢!
回复

使用道具 举报

497#
发表于 2014-11-15 14:56:04 | 只看该作者
过来支持下yaya!
回复

使用道具 举报

498#
发表于 2014-11-15 16:16:01 | 只看该作者
找到了一个疑似BUG,麻烦不点确认一下,顺便把修改后的编译版本也上传起来.我测试了一下,好像是正常的.

  1.         if ( mem == -1ULL &&  ! unset_int13_handler (1)) /* hooked */
  2.         {
  3.                 for (j = 0; j < DRIVE_MAP_SIZE; j++)
  4.                 {
  5.                         if (to != hooked_drive_map[j].from_drive)
  6.                                 continue;
  7.                         //to_o = to;
  8.                         to = hooked_drive_map[j].to_drive;
  9.                         if (to == 0xFF && !(hooked_drive_map[j].to_cylinder & 0x4000))
  10.                         {
  11.                                 /* to_o = */ to = 0xFFFF;                /* memory device */
  12.                         }
  13.                         //下面的bios_drive_map[j] 感觉应该是hooked_drive_map[j],尝试修改了一下,好像是正常的.
  14.                     if (! ((bios_drive_map[j].to_sector) & 0x80)) // The TO drive is not in-situ
  15.                     {
  16.                         if (start_sector == 0 && (sector_count == 0 || (sector_count == 1 && (long long)heads_per_cylinder <= 0 && (long long)sectors_per_track <= 1)))
  17.                         {
  18.                                 sector_count = hooked_drive_map[j].sector_count;
  19.                                 heads_per_cylinder = hooked_drive_map[j].max_head + 1;
  20.                                 sectors_per_track = (hooked_drive_map[j].max_sector) & 0x3F;
  21.                         }
  22.                         start_sector += hooked_drive_map[j].start_sector;
  23.                     }
复制代码

grub4dos-0.4.5c-2014-11-15.7z

258.38 KB, 下载次数: 5

点评

很棒,最近失误太多,大概人老了,力不从心,智力下降。赶快提交吧。  详情 回复 发表于 2014-11-15 16:25
回复

使用道具 举报

499#
发表于 2014-11-15 16:25:03 | 只看该作者
chenall 发表于 2014-11-15 16:16
找到了一个疑似BUG,麻烦不点确认一下,顺便把修改后的编译版本也上传起来.我测试了一下,好像是正常的.

很棒,最近失误太多,大概人老了,力不从心,智力下降。赶快提交吧。
回复

使用道具 举报

500#
发表于 2014-11-15 19:15:57 | 只看该作者
不点 发表于 2014-11-15 16:25
很棒,最近失误太多,大概人老了,力不从心,智力下降。赶快提交吧。

新版正常了。

回复

使用道具 举报

501#
发表于 2014-11-16 15:12:04 | 只看该作者
本帖最后由 mdyblog 于 2014-11-16 21:03 编辑

反映一个奇怪的问题。
在qemu虚拟机 上没问题。 在实际机器上有问题,
map  --mem 内村软盘
  1. map --mem  /a.img (20)
  2. map --rehook
  3. ls  (20)/
复制代码

老是打印下面2行:
  1. Fata! Inconsistent data read from (0x14)0+63
  2. Fata! Inconsistent data read from (0x14)0+1
复制代码


同时还有
  1. Notice: number of heads for drive 14 tuned from 2 to 255.
  2. Notice: number of sectors-per-track for drive 14 tuned from 18 to 63.
复制代码

怎么好像变成硬盘了。


---------------

2测试img ,一个是1.44M标准软盘, 一个是 5M 分区IMG, 都一样。 TST_IMG.7z (5.04 KB, 下载次数: 2)
回复

使用道具 举报

502#
 楼主| 发表于 2014-11-17 10:36:15 | 只看该作者
在实际机器上,使用你提供的 1.44 Mb 软盘,改名为 a.img,然后执行
map --mem  /a.img (20)
map --rehook
ls  (20)/
没有任何问题

点评

好像和机器有关。 老的台式机有问题。  详情 回复 发表于 2014-11-17 13:05
回复

使用道具 举报

503#
发表于 2014-11-17 13:05:45 | 只看该作者
2011yaya2007777 发表于 2014-11-17 10:36
在实际机器上,使用你提供的 1.44 Mb 软盘,改名为 a.img,然后执行
map --mem  /a.img (20)
map --rehoo ...


好像和机器有关。
老的台式机有问题。

点评

0.4.5 也有问题吗? 用 --mem 之后,扇区都在内存里,根本不会跑去执行原始 BIOS 的 int13,又怎可能会出错误呢?难以理解。  详情 回复 发表于 2014-11-17 17:58
回复

使用道具 举报

504#
发表于 2014-11-17 17:58:50 | 只看该作者
mdyblog 发表于 2014-11-17 13:05
好像和机器有关。
老的台式机有问题。

0.4.5 也有问题吗?

用 --mem 之后,扇区都在内存里,根本不会跑去执行原始 BIOS 的 int13,又怎可能会出错误呢?难以理解。

回复

使用道具 举报

505#
发表于 2014-11-17 18:10:35 | 只看该作者
不点 发表于 2014-11-17 17:58
0.4.5 也有问题吗?

用 --mem 之后,扇区都在内存里,根本不会跑去执行原始 BIOS 的 int13,又怎可能 ...

是啊, 就老的台式机有问题。
好像变成 硬盘访问了。
好像 和 软驱配置有关。 现在笔记本根本没有软驱, 所以没有这个合格问题。

0.45我试试。
回复

使用道具 举报

506#
发表于 2014-11-18 04:26:36 | 只看该作者
不点 发表于 2014-11-17 17:58
0.4.5 也有问题吗?

用 --mem 之后,扇区都在内存里,根本不会跑去执行原始 BIOS 的 int13,又怎可能 ...

回复:
2014-1115 0.45c  一样的问题。

2014-1009 0.46a 正常。没有这个问题。

点评

检查了 10 月 9 日前后的代码,没发现问题。你能否进一步确定引入 bug 的准确日期?另外也说说老电脑的配置情况,它的内存有多大?主板厂家?生产日期?可以用 displaymem 命令显示其内存分布。另外,用 map --statu  详情 回复 发表于 2014-11-18 06:59
回复

使用道具 举报

507#
发表于 2014-11-18 06:59:30 | 只看该作者
mdyblog 发表于 2014-11-18 04:26
回复:
2014-1115 0.45c  一样的问题。

检查了 10 月 9 日前后的代码,没发现问题。你能否进一步确定引入 bug 的准确日期?另外也说说老电脑的配置情况,它的内存有多大?主板厂家?生产日期?可以用 displaymem 命令显示其内存分布。另外,用 map --status 显示有关仿真的一些基本信息。还可以用 debug on 打开调试输出,然后再执行 ls 列出虚拟软盘的文件。      
回复

使用道具 举报

508#
发表于 2014-11-18 11:02:24 | 只看该作者
本帖最后由 mdyblog 于 2014-11-18 13:12 编辑
不点 发表于 2014-11-18 06:59
检查了 10 月 9 日前后的代码,没发现问题。你能否进一步确定引入 bug 的准确日期?另外也说说老电脑的配 ...


1: G4d0.46a 2014-1103 开始有这个问题。 1102没有这个问题

2:
机器配置: 机器配置.txt.zip (26.98 KB, 下载次数: 2)

3: 测试 及 测试LOG
用下面的测试包测试。

测试命令:
/mp144.sh > (hd1,4)/X.LOG



/mp144.sh :
!BAT
set /a ver=*0x8278 > nul
echo grub4dos 0.46a %ver%
echo -----[debug on]-----
debug on
echo -----[displaymem]-----
displaymem
echo -----[map --mem /1_44M.IMG (20)]-----
map --mem /1_44M.IMG (20)
echo -----[map --rehook]-----
map --rehook
echo -----[ls (20)/]-----
ls (20)/
echo -----[displaymem]-----
displaymem
echo -----[map --status]-----
map --status
echo -----END-----


测试LOG X.LOG:
grub4dos 0.46a 20141103

-----[debug on]-----

-----[displaymem]-----

EISA Memory BIOS Interface is present
Address Map BIOS Interface is present
Lower memory: 638K, Upper memory (to first chipset hole): 1047488K
[Address Range Descriptor entries immediately follow (values are 64-bit)]
  Usable RAM: Base: 0x0, Length: 0x9F800
  Reserved: Base: 0xF0000, Length: 0x10000
  Reserved: Base: 0xFEC00000, Length: 0x1400000
  Reserved: Base: 0x9F800, Length: 0x800
  Usable RAM: Base: 0x100000, Length: 0x3FEF0000
  Reserved: Base: 0x3FFF3000, Length: 0xD000
  Reserved: Base: 0x3FFF0000, Length: 0x3000
-----[map --mem /1_44M.IMG (20)]-----

FAT12 BPB found with 0xEB (jmp) leading the boot sector.

probed C/H/S = 80/2/18, probed total sectors = 2880
-----[map --rehook]-----

Re-map the memdrive (0x14):
        map --add-mbt=0 --heads=2 --sectors-per-track=18 (md)0x1FF440+0xB40 (0x14)
-----[ls (20)/]-----


get_diskinfo int13/41(14), version=0, int13/08(14), version=0, C/H/S=80/1/18, int13/02(14), err=0

Notice: number of heads for drive 14 tuned from 2 to 255.

Notice: sectors-per-track for drive 14 tuned from 18 to 63.

Fatal! Inconsistent data read from (0x14)0+63

Fatal! Inconsistent data read from (0x14)0+1

a.txt-----[displaymem]-----

EISA Memory BIOS Interface is present
Address Map BIOS Interface is present
Lower memory: 638K, Upper memory (to first chipset hole): 1047488K
[Address Range Descriptor entries immediately follow (values are 64-bit)]
  Usable RAM: Base: 0x0, Length: 0x9F800
  Reserved: Base: 0xF0000, Length: 0x10000
  Reserved: Base: 0xFEC00000, Length: 0x1400000
  Reserved: Base: 0x9F800, Length: 0x800
  Usable RAM: Base: 0x100000, Length: 0x3FEF0000
  Reserved: Base: 0x3FFF3000, Length: 0xD000
  Reserved: Base: 0x3FFF0000, Length: 0x3000
-----[map --status]-----


floppies_orig=1, harddrives_orig=2, floppies_curr=0, harddrives_curr=2

Number of ATAPI CD-ROMs: 0

ram_drive=0x7F, rd_base=0x0, rd_size=0x100000000

Fr To Hm Sm To_C _H _S   Start_Sector     Sector_Count   DHR
-- -- -- -- ---- -- -- ---------------- ---------------- ---
14 FF 01 12 8882 FE 7F 00000000001FF440 0000000000000B40 M=S
-----END-----


测试.LOG.zip (985 Bytes, 下载次数: 1)

4: 测试包
测试包.7z (150.26 KB, 下载次数: 1)

点评

烦请您再做个试验,运行下面的命令,将软盘个数恢复为原始状态,看看还会出错吗? map --floppies=1  详情 回复 发表于 2014-11-18 12:11
回复

使用道具 举报

509#
发表于 2014-11-18 11:46:59 | 只看该作者
11月3日是我改动的。我就纳闷,为什么最近我总是犯错误?11月3日有什么错误,我还没来得及看。我想让 chenall、yaya 看看,究竟错在哪?

我无非就是屏蔽了 BIOS 数据区的软盘,难道我没有屏蔽掉软盘,而是把别的地方弄坏了?

请 chenall、yaya 仔细检查检查。

回复

使用道具 举报

510#
发表于 2014-11-18 12:11:07 | 只看该作者
mdyblog 发表于 2014-11-18 11:02
1: G4d0.46a 2014-1103 开始有这个问题。 1102没有这个问题

2:

烦请您再做个试验,运行下面的命令,将软盘个数恢复为原始状态,看看还会出错吗?

map --floppies=1

回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-6-21 00:40

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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