无忧启动论坛

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

支持含有碎片的文件仿真

    [复制链接]
451#
发表于 2014-11-2 14:57:10 | 只看该作者
mdyblog 发表于 2014-11-2 14:51
grub4dos-0.4.5c-2014-11-02.7z (下载这个,如果没问题,就可以提交。)

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

马上就会有。chenall 提交以后,会自动为 0.4.6 打上补丁。

回复

使用道具 举报

452#
发表于 2014-11-2 17:00:45 | 只看该作者
麻烦再请教2个问题:
1。怎么修改grldr/grub.exe的长度?在内置菜单前面加一些数据,
(1) 内置菜单编辑软件不回把它当作内置菜单的一部分。
(2) grub启动后,作为.TEXT(或.DATA)加载到内存,且位置能计算出来,怎么计算?


2. 哪块内存, 启动新的grldr/grub.exe 后不会被破坏?
想传递点数据。(启动过程不受我控制)
回复

使用道具 举报

453#
发表于 2014-11-2 17:53:02 | 只看该作者
我想不到有什么办法。

大概只能把自己的数据放在内置菜单尾部,自己想办法处理。内置菜单在内存中的位置是公开的。

回复

使用道具 举报

454#
发表于 2014-11-3 09:52:56 | 只看该作者
不点 发表于 2014-11-2 17:53
我想不到有什么办法。

大概只能把自己的数据放在内置菜单尾部,自己想办法处理。内置菜单在内存中的位置 ...

再在请教:
哪块内存, 启动新的grldr/grub.exe 后不会被破坏?
想传递点数据。(启动过程不受我控制)
回复

使用道具 举报

455#
发表于 2014-11-3 10:32:09 | 只看该作者
本帖最后由 mdyblog 于 2014-11-3 10:37 编辑
不点 发表于 2014-11-2 14:57
马上就会有。chenall 提交以后,会自动为 0.4.6 打上补丁。


0.46a更新了, 成功了。
回复

使用道具 举报

456#
发表于 2014-11-3 10:39:46 | 只看该作者
1。映射的虚拟内存盘,是 BIOS 级的,其作用范围是所有的操作系统,就是说,所有的操作系统都不会破坏虚拟内存盘。因此,你把信息放在内存盘里面,新的 grub 环境也会承认它,不会破坏它。

2。常规内存顶部的一些空间,grub4dos 的内核不用,你可以用,但是,别人也可能会用。如果你不考虑 “别人”,程序始终是你的程序在运行,那你可用的空间还是很多的。但是假如别人也使用这些空闲的空间,那就不好说了。

回复

使用道具 举报

457#
发表于 2014-11-3 14:48:53 | 只看该作者
不点 发表于 2014-11-3 10:39
1。映射的虚拟内存盘,是 BIOS 级的,其作用范围是所有的操作系统,就是说,所有的操作系统都不会破坏虚拟 ...

>>常规内存顶部的一些空间,grub4dos 的内核不用,
谢谢。
能给出准确的地址(md)XX+YY码?

还有个图,debug时偶然出来的,请问怎么回事?

途中红色部分 “S1[”  和“

点评

这是DEBUG调试信息,主要是调试批处理脚本使用的. 显示的是要执行的命令行. 用debug 3时才会出现.  详情 回复 发表于 2014-11-3 16:04
回复

使用道具 举报

458#
发表于 2014-11-3 16:04:59 | 只看该作者
mdyblog 发表于 2014-11-3 14:48
>>常规内存顶部的一些空间,grub4dos 的内核不用,
谢谢。
能给出准确的地址(md)XX+YY码?

这是DEBUG调试信息,主要是调试批处理脚本使用的.
显示的是要执行的命令行.

用debug 3时才会出现.

点评

我用 debug 3 大部分情况现不出这个。 只是偶尔,不知道怎么按出来的。 觉得挺好(能显示结尾的空格)。所以问问怎么确定弄出来。  详情 回复 发表于 2014-11-3 16:23
回复

使用道具 举报

459#
发表于 2014-11-3 16:21:02 | 只看该作者
debug 显示的信息,一般用于排错,定位 bug。看不懂没关系(你图片中的这些内容,我也不太了解),只要平时它不显示出来即可。

关于内存的使用,我印象着,我不使用 0x40000 ~ 0x7FFFF 这段内存。但是,chenall 可能使用了其中低端的一部分内存,你要问 chenall 才行。

0x80000 以上的内存,有可能被 PXE 的 BIOS 占用。grub4dos 的磁盘仿真也占据常规内存顶部的一些空间。所以,你能够自由使用的内存,大致在 0x78000 以下。假定 chenall 使用了 0x40000 至 0x50000 之间的内存,那么,你可以自由使用的内存范围就是 0x50000~0x78000。然而正如前面所说,别人也可能使用这些内存。假如不考虑与别人的冲突问题,你可以使用这段内存。

如果从 grub4dos 环境进入 DOS,再回到 grub4dos 的环境,则上述所说的常规内存段就可能已经被 DOS 破坏了。从 grub4dos 进入 NTLDR 再回到 grub4dos,也是同样的道理,内存都会被破坏。甚至在 grub4dos 下启动另一个 grub4dos 也是会破坏那些内存段的。

回复

使用道具 举报

460#
发表于 2014-11-3 16:23:01 | 只看该作者
chenall 发表于 2014-11-3 16:04
这是DEBUG调试信息,主要是调试批处理脚本使用的.
显示的是要执行的命令行.

谢谢。
我用 debug 3
大部分情况现不出这个。
只是偶尔,不知道怎么按出来的。
觉得挺好(能显示结尾的空格)。所以问问怎么确定弄出来。
回复

使用道具 举报

461#
发表于 2014-11-3 16:30:32 | 只看该作者
不点 发表于 2014-11-3 16:21
debug 显示的信息,一般用于排错,定位 bug。看不懂没关系(你图片中的这些内容,我也不太了解),只要平时 ...

谢谢!
那还是试试这个:“1。映射的虚拟内存盘,是 BIOS 级的”
怎快速 用(fd20)锁定一段4K内存(被fd20占用), 并能得到其地址。
我可以用来作为数据区。
下面是示意命令:
map  --mem --top len=0x2000   (fd20)
..getaddr (fd2) to buf_var

点评

还真有这个功能,很早就实现了的..^_^,不过好像没有公开, 只是我自己有在用. map --mem (md)+8 (20) map --hook map --status=20 set buf_var=%?%  详情 回复 发表于 2014-11-3 17:13
回复

使用道具 举报

462#
发表于 2014-11-3 16:38:32 | 只看该作者
目前没有什么公开的办法来获得内存盘的物理地址。

不过你可以自己想办法来弄。你也可以给 chenall 提建议,让他想办法把内存盘的地址弄出来。

回复

使用道具 举报

463#
发表于 2014-11-3 16:52:31 | 只看该作者
--mem=RESERV
或有用处

点评

这个一般不能用。固定地址一用,那么在其之上的内存都被看成内存盘了,太浪费内存。  详情 回复 发表于 2014-11-3 16:55
回复

使用道具 举报

464#
发表于 2014-11-3 16:55:16 | 只看该作者
pseudo 发表于 2014-11-3 16:52
--mem=RESERV
或有用处

这个一般不能用。固定地址一用,那么在其之上的内存都被看成内存盘了,太浪费内存。
回复

使用道具 举报

465#
发表于 2014-11-3 17:13:01 | 只看该作者
本帖最后由 chenall 于 2014-11-3 17:19 编辑
mdyblog 发表于 2014-11-3 16:30
谢谢!
那还是试试这个:“1。映射的虚拟内存盘,是 BIOS 级的”
怎快速 用(fd20)锁定一段4K内存(被fd ...


还真有这个功能,很早就实现了的..^_^,不过好像没有公开, 只是我自己有在用.

map --mem (md)+8 (20)
map --hook
map --status=20
set /a buf_var=%?%<<9


map --status=NUM  这个NUM是个映射的盘符

map --status=20

返回fd20的起始扇区start_sector,(有可能是内存的,也有可能是硬盘的),和扇区数量(sector_count),%?%是start_sector,%@retval%也就是运行的返回值是数量

map --mem 就是内存的了,如果是map (hd0,x)/xxx.img (fd20) ,则得到的是硬盘的.

点评

太好了! 热泪盈眶啊!!!!! 谢谢!  详情 回复 发表于 2014-11-3 17:50
回复

使用道具 举报

466#
发表于 2014-11-3 17:50:08 | 只看该作者
chenall 发表于 2014-11-3 17:13
还真有这个功能,很早就实现了的..^_^,不过好像没有公开, 只是我自己有在用.

map --mem (md)+8 (20)
...

太好了!
热泪盈眶啊!!!!!
谢谢!
回复

使用道具 举报

467#
发表于 2014-11-3 18:15:49 | 只看该作者
反映一个碰到现象,不知道是否是BUG。
(hd0,2)上的一个连续的HD.IMG还是上次的HD.IMG),有分区表,用扇区序列map是有问题。IMG直接map没问题。
对比见图。

HD.IMG.7z

140.65 KB, 下载次数: 2

点评

你能否说说 0.4.5 和 0.4.6 哪个有问题?或者是都有问题?  详情 回复 发表于 2014-11-3 19:42
回复

使用道具 举报

468#
发表于 2014-11-3 19:42:04 | 只看该作者
mdyblog 发表于 2014-11-3 18:15
反映一个碰到现象,不知道是否是BUG。
(hd0,2)上的一个连续的HD.IMG还是上次的HD.IMG),有分区表,用扇区 ...

你能否说说 0.4.5 和 0.4.6 哪个有问题?或者是都有问题?
回复

使用道具 举报

469#
发表于 2014-11-3 20:00:46 | 只看该作者
我测试了一下,是0.4.6a的问题..

0.4.6a的blocklist命令显示的数据不对,请yaya有空看一下,没空的话我明天再查一下.



点评

现在了0.46 2014-1103, 这个更新了了这个问题吗? 测试还没有。 [attachimg]202488[/attachimg]  详情 回复 发表于 2014-11-4 15:02
回复

使用道具 举报

470#
发表于 2014-11-3 20:51:59 | 只看该作者
不点 发表于 2014-11-3 19:42
你能否说说 0.4.5 和 0.4.6 哪个有问题?或者是都有问题?


图片上 标题有(0.46a-2014-1102)
回复

使用道具 举报

471#
发表于 2014-11-4 15:02:07 | 只看该作者
chenall 发表于 2014-11-3 20:00
我测试了一下,是0.4.6a的问题..

0.4.6a的blocklist命令显示的数据不对,请yaya有空看一下,没空的话我明天 ...


今天下载了0.46 2014-1103, 这个更新了这个问题吗?
测试还没有啊。
回复

使用道具 举报

472#
 楼主| 发表于 2014-11-4 15:06:41 | 只看该作者
已经修正,并且上传。

点评

无分区表P.IMG测试也正常: [attachimg]202501[/attachimg]  详情 回复 发表于 2014-11-4 16:49
这个版本好了。[attachimg]202500[/attachimg]  详情 回复 发表于 2014-11-4 16:42
回复

使用道具 举报

473#
发表于 2014-11-4 16:42:25 | 只看该作者
2011yaya2007777 发表于 2014-11-4 15:06
已经修正,并且上传。

这个版本好了。
回复

使用道具 举报

474#
发表于 2014-11-4 16:49:16 | 只看该作者
2011yaya2007777 发表于 2014-11-4 15:06
已经修正,并且上传。

无分区表P.IMG测试也正常:
回复

使用道具 举报

475#
发表于 2014-11-14 18:02:01 | 只看该作者
本帖最后由 mdyblog 于 2014-11-15 08:48 编辑

反映一个问题, 不知道 是 G4D的问题 , 还是 PE启动器的问题, 还是 使用不当(超范围使用)



=================
1:

图1:


图2:





=================
2:过程如下:
说明: 只有一个硬盘,没有CDROM、软盘)
1) 启动后 map  硬盘上的一段扇区序列 为 (hd0)
map   (hd0)0x1000+0x2000  (hd0)
map   (hd0)  (hd1)
map  --rehook
root  (hd0,1)

2) 然后 一程序 又加载 (hd1) 一段扇区序列 为 (hd0)
map   (hd1)0x4000+0xC8000000  (hd0)
map   (hd0)  (hd2)
map  --rehook
root  (hd0,0)
map --status
就是图1

//下面启动 2003PE
chainloadr  /ntldr
boot

出现上面的 图2的错误.

-------------------
X1)如果没有1)步,直接2)步,启动没问题的。
map   (hd0)0x4000+0xC8000000  (hd0)
map   (hd0)  (hd1)
map  --rehook
root  (hd0,0)
chainloadr  /ntldr
boot
成功


=================
3: 请教:
图1那个 map --status 怎么判读啊?
就是2次map 出问题了.
这是什么问题?

回复

使用道具 举报

476#
发表于 2014-11-14 23:26:02 | 只看该作者
你的步骤标号有点乱,有两个第三步。根据自己的理解,给以答复。

先翻译一下 windows 出错信息,如下:

setup 程序检测到,在你的系统中,要么有多个磁盘无法彼此区分开来,要么有 raw disks。setup 已经纠正了这个错误,但需要你重启动一下。

你创建的 hd1 和 hd2 都是克隆本地硬盘 hd0。hd2 是多余的,windows 无法区分。所以给出错误信息,不再继续运行,以免破坏了你的重要文件。

回复

使用道具 举报

477#
发表于 2014-11-15 09:11:40 | 只看该作者
不点 发表于 2014-11-14 23:26
你的步骤标号有点乱,有两个第三步。根据自己的理解,给以答复。

先翻译一下 windows 出错信息,如下:
...

楼上帖子,重新整理了,麻烦再看看。

》》你创建的 hd1 和 hd2 都是克隆本地硬盘 hd0。
hd1 和 hd2 , 只是  克隆本地硬盘 hd0 的 一部分而已,应该是 不同的磁盘。怎么会出问题?

如果说 只要是克隆本地硬盘, 原来的 克隆本地硬盘 也不删掉,  就非法, 那么后面一步映射法时,为什么不出问题?
此时 hd1 只是  克隆本地硬盘“R-hd0” 。hd1 就是 R-hd0.
对比
分片模拟盘   本地硬盘(R-hd0)
2步法: hd0=R-hd0-片1        hd1=1R-hd0-片2 hd2=R-hd0
1步法: hd0=R-hd0-片2 hd1=R-hd0


》》hd2 是多余的,
如果这样,“一步法” 中  hd1 也是“多余的”?
关键是 这个hd2还不能删除。
hd2 保存是原始的磁盘,完全的信息。丢了, 后面就麻烦了。
启动PE时也不一定可以删除hd2,有的PE,还是要从原始的磁盘 加载文件。
因为  2步法 中的加载, 就是 1步法 执行2次 而已。

如果程序删掉(hd2),那么在第一轮中,同样代码会删除 hd1。  这样 丢失了 原始的磁盘, 第二轮 找不到 分片源, 而无法进行。

----用grub4dos 做2次开发, 和直接用不同, 很多东西不能控制。
不知道我分析的对不对?
回复

使用道具 举报

478#
发表于 2014-11-15 10:37:10 | 只看该作者
本帖最后由 mdyblog 于 2014-11-15 10:41 编辑
不点 发表于 2014-11-14 23:26
你的步骤标号有点乱,有两个第三步。根据自己的理解,给以答复。

先翻译一下 windows 出错信息,如下:
...


直接 做个Mini测试包(19M) 给你们测试吧, 比码字强多了。
链接: http://pan.baidu.com/s/1bnjdvaR 密码: 8ysa
测试方法(嗯图片,测试工具,IMG, 包内具有):


菜单说明:
1)下面是1步法, 能启动
  1. title OneStep
  2.         map --in-situ (hd0,0)/PE.IMG  (hd0)
  3.         map (hd0)  (hd1)
  4.         map --rehook
  5.         root (hd0,0)
  6.         chainloader /ntldr
  7.         boot
复制代码

下面是2步法,PE不能启动:
  1. title TwoStep
  2.         map (hd0,0)/HD.IMG  (hd0)
  3.         map (hd0)  (hd1)
  4.         map --rehook
  5.         root (hd0,1)
  6.         map --in-situ (hd1,0)/PE.IMG  (hd0)
  7.         map (hd1)  (hd2)
  8.         map --rehook
  9.         root (hd0,0)
  10.         chainloader /ntldr
  11.         boot
复制代码

点评

这个后面的map (hd1) (hd2)是多余的. 你这些命令执行之后第一条命令map (hd0,0)/HD.IMG (hd0)是没有作用的. 被 map --in-situ (hd1,0)/PE.IMG (hd0)覆盖了. 另外你这些命令执行最后的结果就是hd0和hd1,hd2  详情 回复 发表于 2014-11-15 11:12
请等待我给菜单加说明。  详情 回复 发表于 2014-11-15 11:07
回复

使用道具 举报

479#
发表于 2014-11-15 10:47:10 | 只看该作者
本帖最后由 不点 于 2014-11-15 11:00 编辑

我看不懂你的解释。但我还是给你的做法加个注释,希望这能够帮到你。

1) 启动后 map  硬盘上的一段扇区序列 为 (hd0)
map   (hd0)0x1000+0x2000  (hd0)  这条命令创建虚拟盘 hd0, 它是用原装的 hd0 的部分扇区序列构成
map   (hd0)  (hd1) 这条命令创建虚拟盘 hd1, 它完全克隆原装的 hd0
map  --rehook
root  (hd0,1)

2) 然后 一程序 又加载 (hd1) 一段扇区序列 为 (hd0)
map   (hd1)0x4000+0xC8000000  (hd0) 创建虚拟盘 hd0, 覆盖掉原先创建的虚拟盘 hd0
map   (hd0)  (hd2) 从 hd0 创建 hd2, 此时,hd2 应该是克隆上次虚拟出来的 hd0,然而,从图片来看,hd2 是克隆了原始盘 hd0, 这是错的,你可以报告 bug. 你对比一下 0.4.5 和 0.4.6, 看看效果是否一样。
map  --rehook
root  (hd0,0)
map --status
就是图1

//下面启动 2003PE
chainloadr  /ntldr
boot

出现上面的 图2的错误.

-------------------
X1)如果没有1)步,直接2)步,启动没问题的。
map   (hd0)0x4000+0xC8000000  (hd0)
map   (hd0)  (hd1)
map  --rehook
root  (hd0,0)
chainloadr  /ntldr
boot
成功

回复

使用道具 举报

480#
发表于 2014-11-15 11:07:28 | 只看该作者
本帖最后由 不点 于 2014-11-15 11:30 编辑
mdyblog 发表于 2014-11-15 10:37
直接 做个Mini测试包(19M) 给你们测试吧, 比码字强多了。
链接: http://pan.baidu.com/s/1bnjdvaR 密 ...


请等待我给菜单加说明。

title TwoStep
        map (hd0,0)/HD.IMG  (hd0)
        map (hd0)  (hd1)
        map --rehook
        root (hd0,1)

此时 hd0 和 hd1 都是虚拟盘,hd0 是原始 hd0 的一部分扇区序列,hd1 是克隆原始的 hd0。

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

此时,hd0 是原始盘 hd0 上的 in situ 虚拟盘。它与原始盘 hd0 的分区表不同,其它扇区相同。
此时,hd1 和 hd2 都是原始盘 hd0 的克隆,因此,hd2 是多余的,它有可能让 windows setup 程序感到不愉快。

注意,原始的 hd0 已经被虚拟的 hd0 覆盖、隐藏了,此时只有 hd1 和 hd2 才能用来访问原始的 hd0.


        root (hd0,0)
        chainloader /ntldr
        boot

回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-7-1 12:32

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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