无忧启动论坛

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

支持含有碎片的文件仿真

    [复制链接]
211#
发表于 2015-1-13 18:47:29 | 显示全部楼层
chenall 发表于 2015-1-13 17:29
我git用习惯了,觉得比svn 强大多了,也是挺方便的.

git下载的是整个版本库的内容,下载之后可以随时切 ...

2015-0109 修改后, 也能正常运行03PE-SATA。
F6IMG 彩色提示成功,没有垃圾显示(没加死循环检测)

grub4dos0109_src_FIXOK.7z

732.4 KB, 下载次数: 2

grub4dos-0.4.6a-2015-0109Fix-2015-01-13.7z

405.67 KB, 下载次数: 4

回复

使用道具 举报

212#
发表于 2015-1-14 01:02:27 | 显示全部楼层
本帖最后由 mdyblog 于 2015-1-14 17:04 编辑
chenall 发表于 2015-1-13 19:23
下载看了下,你的源码比较乱,生成的diff文件不知是基于什么版本的.

我只好自己弄了个1206版的源码和你上 ...


目前,还不是“修复”,
而是定位出问题的代码行。

这样 不用 没有方向,疑神疑鬼。

接着才是 如何解决问题。---map慢的问题。
回复

使用道具 举报

213#
发表于 2015-1-14 04:24:58 | 显示全部楼层
本帖最后由 mdyblog 于 2015-1-14 10:44 编辑
chenall 发表于 2015-1-13 19:23
下载看了下,你的源码比较乱,生成的diff文件不知是基于什么版本的.

我只好自己弄了个1206版的源码和你上 ...


搞定了。


源码: grub4dos-0.4.6a-2015-01-09-FIX-SRC.7z (740.91 KB, 下载次数: 5)
目标码: grub4dos-0.4.6a-2015-01-09-FIX-bin.7z (271.25 KB, 下载次数: 9)


源码 下载页面下载的ZIP包修改的, 请BC3比较。
grub4dos-54b867e229fd26e4f44a349095d7f3d0596247e1\  =原始下载的zip包的源码。
new-grub4dos-54b867e229fd26e4f44a349095d7f3d0596247e1\  =修改后的源码。

主要改的disk_io.c,的 block_read_func()函数。
cmdline.c中的优化,不关键。
回复

使用道具 举报

214#
发表于 2015-1-14 11:01:44 | 显示全部楼层
chenall 发表于 2015-1-13 19:23
下载看了下,你的源码比较乱,生成的diff文件不知是基于什么版本的.

我只好自己弄了个1206版的源码和你上 ...

发现一个可能的"定时炸弹".

显然,一般观念上认为设备是扇区对齐的,最少是512字节对齐的。

但是g4d中似乎有一种间接的手段,来创建反例的设备。

那就是内存盘。可以是任意字节对齐的。
这种 实际和观念上的 差异, 随时会 丢出 一个 定时炸弹。


F6IMG 之所以 突然 丢出 一个 定时炸弹。
就是她创建了一个这样的  字节 内存盘。

map --mem=0x20000 %~f0 (rd)
cat --locate=\x1f\x8b --number=1 (rd)+1 > nul || exit 1
calc *0x82d8=*0x82d8-%?% > nul
calc *0x82d0=*0x82d0+%?% > nul
map --mem (rd)+1 (1) && map --rehook

0000:82D0  8字节(即四字) rd 设备物理基地址

这里直接修改  rd 设备物理基地址(字节单位)。
由于支持任意字节地址,这样 rd实际上就是 字节内存盘了。
F6IMG中
*0x82d0=0x20000 + 0x147E=0x2147E

就是这个“差异”,丢出的 定时炸弹, 造成 F6IMG没有正常运行。



回复

使用道具 举报

215#
发表于 2015-1-14 20:25:23 | 显示全部楼层
chenall 发表于 2015-1-14 19:51
谢谢你的努力.

通过你改动的代码终于发现了问题的原因.就是下面这一句

楼上grldr测试:
1) F6IMG 模拟, 成功
2)  F6IMG  实机,暂时测试不了。那机器在使用中。
3)map 10G, 耗27秒。

回复

使用道具 举报

216#
发表于 2015-1-14 21:13:04 | 显示全部楼层
chenall 发表于 2015-1-14 20:42
最新版本附件,请测试.

回复

使用道具 举报

217#
发表于 2015-1-15 20:51:05 | 显示全部楼层
本帖最后由 mdyblog 于 2015-1-15 20:56 编辑
chenall 发表于 2015-1-14 21:27
看起来应该是正常了.


能不能在下载页面先出个正式版。
回复

使用道具 举报

218#
发表于 2015-1-15 22:16:17 | 显示全部楼层
chenall 发表于 2015-1-15 21:17
??正式版?0.4.6a的正式版还早着呢,

0.4.5c接一下没有什么问题的话就可以出正式版了.我现在也全部转到0.4 ...

就 767# 楼的哪个。 先做一个下载版本。

至于其它功能, 后面在恢复, 然后再出个下载版本。
回复

使用道具 举报

219#
发表于 2015-1-16 07:19:52 | 显示全部楼层
chenall 发表于 2015-1-15 21:17
??正式版?0.4.6a的正式版还早着呢,

0.4.5c接一下没有什么问题的话就可以出正式版了.我现在也全部转到0.4 ...

grub4dos-0.4.6a-2015-01-15.7z:
启动 03PE-sATA :OK

回复

使用道具 举报

220#
发表于 2015-1-16 08:52:37 | 显示全部楼层
本帖最后由 mdyblog 于 2015-1-16 08:55 编辑
chenall 发表于 2015-1-15 21:17
??正式版?0.4.6a的正式版还早着呢,

0.4.5c接一下没有什么问题的话就可以出正式版了.我现在也全部转到0.4 ...


0.46a 2015.0115 出现 系统堆栈耗尽:



我没有用 嵌套调用啊!


系统堆栈 多大?  保留保险区多大?
回复

使用道具 举报

221#
发表于 2015-1-16 09:37:43 | 显示全部楼层
chenall 发表于 2015-1-16 09:20
你的脚本???

目前 嵌套调用 保险区留了0x1000


1)
是我的脚本。
没有嵌套。
调用层级不超过9.

可能 是别的原因。 我再找找。



2)
(0X7000-0X2000)/304=67
只能67层。
304? 怎么这么大?
用到 局部数组了吗?
用普通变量,得写道手酸。




3)
还是建议, 保护模式用自己的堆栈。 开个大的。
我的程序基本能保证不超过30层。

但是一般人写程序,可麻烦了。
再说 递归算法 也是重要的算法, 一般人爱用的。
很多 递归算法, 转飞非递归算法, 对一般人还是非常难的。

怎么 也得1000层。

1M的保护膜式堆栈 不过分。 MS默认就1M。


1M /304=3449  层

回复

使用道具 举报

222#
发表于 2015-1-16 11:41:59 | 显示全部楼层
chenall 发表于 2015-1-16 09:20
你的脚本???

目前 嵌套调用 保险区留了0x1000

1)
用echo 跟踪流程。
发现是程序跑飞了。
莫名奇妙的往回跑
然后循环打印。
知道 打印 “系统堆栈耗尽”。
至于 为什么  换成新版 ,就这么奇怪, 还比清楚。

哦, 没和函数 我用 “goto :eof”返回的。


2)
能不能 767# 楼的那个 做一个下载版本。

至于其它功能, 后面在恢复, 然后再出个下载版本。

我看 0115版大了好多啊, 增加了好多东西吧。 内存也多了。 改变内存布局。

我要在说明书中 建议一个 g4d 版本。
回复

使用道具 举报

223#
发表于 2015-1-16 12:56:18 | 显示全部楼层
chenall 发表于 2015-1-16 12:29
767#和下载站的是一样的源码的,效果应该是一样的.

我不明白你为什么一直强调要用767#的重新恢复?要恢 ...

1) 大了 2K

2)可能是你加了debug 的原因。

前面的版本 是没有加 debug 的。
那是0109 上 直接修复那个 问题。 0110开始的debug 没有恢复。
debug 模块 不是很关键,所以希望 debug前发布一个下载版本。
这个debug的设计方案,  还有下面的问题。



3)关于 debug 的个问题。


发现 用debug 来运行那个脚本 就没问题。
一路回车 没问题。
直接E, 让他自己跑, 问题。

不用debug就有问题了 。

也就是debug改变运行方式的 。
这样 debug 的意义达了折扣。

debug  改变了 检查 对象。

点评

这些都只是你自己的猜测而已.  发表于 2015-1-16 13:12
回复

使用道具 举报

224#
发表于 2015-1-16 12:57:33 | 显示全部楼层
本帖最后由 mdyblog 于 2015-1-16 13:05 编辑
zxw 发表于 2015-1-16 12:03
好久没关注grub4dos了。
0115版的是否进一步限制了批处理的标签数量?
run用0110版测试正常,用0115版不 ...
我这里 0115版 也是 问题啊。好像也标签的问题。 反正是乱跑。
把我跑晕了(跟踪它)。


建议 你试试  767#楼    或 760# 楼 那个版本。
这个没问题。 关键的文件体也都解决了。 就是 没有新版的 debug , 有旧版的debug。


------------
我把标签都去掉试试。

点评

你可以把你的脚本上传上来看下,不太可能会乱跑的.  发表于 2015-1-16 13:10
回复

使用道具 举报

225#
发表于 2015-1-16 13:17:10 | 显示全部楼层
本帖最后由 mdyblog 于 2015-1-16 13:19 编辑
chenall 发表于 2015-1-16 12:29
767#和下载站的是一样的源码的,效果应该是一样的.

我不明白你为什么一直强调要用767#的重新恢复?要恢 ...


>> chenall  你可以把你的脚本上传上来看下,不太可能会乱跑的.  发表于 2 分钟前

我这是 MBROS系统。 UDM磁盘核心中。不是一个文件。不好拿出来。
我看 能不能模拟出问题。


是不是新版 debug 引起的标签问题。

我打算把所有标签都删掉。

点评

如果是debug引起的问题就不会有你前面说的,用debug正常,不用debug不正常的问题了.  详情 回复 发表于 2015-1-16 13:21
回复

使用道具 举报

226#
发表于 2015-1-16 14:07:41 | 显示全部楼层
本帖最后由 mdyblog 于 2015-1-16 14:29 编辑
chenall 发表于 2015-1-16 13:21
如果是debug引起的问题就不会有你前面说的,用debug正常,不用debug不正常的问题了.


1) 和 zxw 比较类似。

好像也是最后的 标签 出问题了。

测试 包。 8秒自动 测试---1
test0115.fba.7z (141.81 KB, 下载次数: 2)   --0.45c

test0115-046.7z (148.64 KB, 下载次数: 1)   --0.46a




2)
我觉得这样的运作方式, 我等 手足无错啊。

解决一个BUG时, 又添加新功能。

而, 一般来说, “添加新功能”有 带来新BUG的 风险。

解决 一个BUG后, 不 加新功能, 就发布一个版本。
后面加新功能,再发布新版本。

这样一步 一步地, 踏实些。

反正 版本号又 不花费什么。

回复

使用道具 举报

227#
发表于 2015-1-16 14:27:36 | 显示全部楼层
zxw 发表于 2015-1-16 14:19
很遗憾,经测试与标签数量无关。
抽空简化了一个批处理版本,人为设置了125个标签,运行正常。
与批 ...

1) 你试过 767#吗?

2)
我也是小心翼翼, 才复制出演示环境。

用一些 简单语句替换程序代码行。
这样大体体积不变。

才作出上面的 演示环境

点评

zxw
与0115版本问题一样。  详情 回复 发表于 2015-1-16 14:35
回复

使用道具 举报

228#
发表于 2015-1-16 14:32:27 | 显示全部楼层
chenall 发表于 2015-1-16 13:21
如果是debug引起的问题就不会有你前面说的,用debug正常,不用debug不正常的问题了.

>>如果是debug引起的问题就不会有你前面说的,用debug正常,不用debug不正常的问题了.
这话说的 有点 外行哦!
程序是一个整体,添加后 哪能这么 切豆腐一样。
回复

使用道具 举报

229#
发表于 2015-1-16 15:00:48 | 显示全部楼层
本帖最后由 mdyblog 于 2015-1-16 15:11 编辑
zxw 发表于 2015-1-16 14:35
我这里测试767#与0115版本问题一样。
760#的版本没有问题。


767# 有问题? 我测试下。
----------------------
还真是这样哦。

看来 从767#开始就有问题了。
看来的把670#先做一个下载版本。(后面添加的功能不是关键功能)



回复

使用道具 举报

230#
发表于 2015-1-16 16:46:46 | 显示全部楼层
zxw 发表于 2015-1-16 14:35
我这里测试767#与0115版本问题一样。
760#的版本没有问题。

我这 grub4dos-0.4.6a-2015-01-16.7z  测试正常了。
你那儿 grub4dos-0.4.6a-2015-01-16.7z  正常吗?

点评

zxw
测试了一下,正常了。  详情 回复 发表于 2015-1-17 10:50
回复

使用道具 举报

231#
发表于 2015-1-17 11:38:21 | 显示全部楼层
本帖最后由 mdyblog 于 2015-1-17 12:44 编辑
527104427 发表于 2015-1-17 10:26
这个出错提示怎么不能屏蔽


新版 是按照 教义 做的-----教条主义。
垃圾显示便多了。

完全 不理会 实际使用者的 使用情况。

------------
没办法啊。
在天朝的信仰教育 “培育”下, 现在,整个天朝 流行 信仰的巫风。
回复

使用道具 举报

232#
发表于 2015-1-17 12:41:29 | 显示全部楼层
本帖最后由 mdyblog 于 2015-1-17 12:55 编辑
chenall 发表于 2015-1-17 11:45
最新的版本是可以屏蔽所有错误提示的(严重的错误提示除外)

测试版地址在这里.执行命令debug msg=0之后,9 ...


》》另外我觉得mdyblog很喜欢把自己的思想强加在别人身
我不是这个意思。
我是说,"不管怎样, 总得提供一种手段, 让人‘能够’在需要的时候,  关闭  那些 信息。让用户能够完全掌控屏幕。"
也就是说, 你可以按照 你的“教义”设计。
然后做加法。 增加一些手段(命令或开关), 关闭这些 提示。 所有的提示信息,用户都有手段关闭。让用户能够完全掌控屏幕。

如果 用 VC 开发程序, 无法完全控制屏幕, 总是 自己冒出一些,不能控制的, MS预置的画面。 那是什么情况!!!!

反正多几个开关 又不花银子。
要能“得教义”——不能被它住了。

用户最反感的是“begin pxe scan”。 一直不让关掉。
还有 开机提示的:
GRUB4DOS 0.4.6a 201
Processing the  
Turning on gate A20
If hangup, use 'geometry --lba1sector ('     <------------近来冒出来的
Fatal! Inconsistent data read from
Error: No Such Command
cannot find the batch label    <------------最近几个版本冒出来的

----------
这些不是不说要,可以要——开发者的意见就当默认值。
但是得给用户一个正常的手段, 可以关闭这些。
这些实现起来也不困难。 就一些 状态掩码 就能搞定。

点评

我也不赞成完全抹掉信息,grub4dos不应该只默默的做别人的嫁衣,该露脸的时候还是要露脸。  详情 回复 发表于 2015-1-20 11:46
回复

使用道具 举报

233#
发表于 2015-1-20 13:35:24 | 显示全部楼层
jianliulin 发表于 2015-1-20 11:46
我也不赞成完全抹掉信息,grub4dos不应该只默默的做别人的嫁衣,该露脸的时候还是要露脸。

露脸 应该是  打印 产品名称 公司名称 组织名称。
而且应该在最开始才有。
用户 软件在 运行起来后,应该能 完全 掌控 屏幕


Processing the  
Turning on gate A20
If hangup, use 'geometry --lba1sector ('   
Fatal! Inconsistent data read from
Error: No Such Command

这些 和  “露脸 ”无关——反倒是“黑脸”。

应该提供正常手段, 用户可以屏蔽这些信息。
回复

使用道具 举报

234#
发表于 2015-1-21 06:39:15 | 显示全部楼层
》》debug msg=N sets message level. 0:off=>no messages,1-3:on,1:warning+error messages to stderr, 2=error messages to stderr, 3=all messages to stdout
请问 默认是多少?
关闭后想恢复默认值。

点评

默认是2  详情 回复 发表于 2015-1-21 09:53
回复

使用道具 举报

235#
发表于 2015-1-21 13:44:48 | 显示全部楼层

请问 json格式的下载信息 在哪儿啊?

点评

http://bbs.wuyou.com/forum.php?mod=viewthread&tid=355331&extra=page%3D1  详情 回复 发表于 2015-1-21 16:11
回复

使用道具 举报

236#
发表于 2015-1-28 06:07:42 | 显示全部楼层
本帖最后由 mdyblog 于 2015-1-28 06:10 编辑

请问C大, 能否实现这样的功能: 将更1另新版grub.exe 最为外部命令来用。
或者叫 grubi.exe

执行完  grubi.exe  后返回。 (返回到调用者grldr或grub.exe或grubi.exe)

grubi.exe  你面可以内置脚本: 批处理脚本 (!BAT开始)  或  菜单脚本
回复

使用道具 举报

237#
发表于 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通过。如图:



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


回复

使用道具 举报

238#
发表于 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)
...
来映射的虚拟磁盘。
回复

使用道具 举报

239#
发表于 2015-2-11 10:11:47 | 显示全部楼层
请问这个现在在哪儿?
---------------------------------------------------------
目前可以使用的函数和变量:
http://grubutils.googlecode.com/svn/trunk/src/include/grub4dos.h
----------------------------------------------------------
回复

使用道具 举报

240#
发表于 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);


回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-23 21:54

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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