无忧启动论坛

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

支持含有碎片的文件仿真

    [复制链接]
751#
发表于 2015-1-13 17:27:42 | 只看该作者
mdyblog 发表于 2015-1-13 17:21
git clone git://github.com/chenall/grub4dos.git grub4dos_src
-----------------
下载grubdos.a-20141 ...

我说一个方法,是我偏爱的。不用 git,而用 svn,这样可以一次性下载到 0.4.5 和 0.4.6 两个系列。

svn   co   https://github.com/chenall/grub4dos   grub4dos_src

如果是下载某次修订(比如第 577 次修订版),可以加上 -r 参数:

svn   co   -r   577   https://github.com/chenall/grub4dos   grub4dos_src

点评

>>svn co -r 577 https://github.com/chenall/grub4dos grub4dos_src 这个 577 怎么和版本对上关系, 哪儿有这个信息。  详情 回复 发表于 2015-1-13 17:48
我git用习惯了,觉得比svn 强大多了,也是挺方便的. 可以随时切换到任意版本(不需要联网),本地临时测试分支等. 用SVN就是切换版本需要重新下载源码  详情 回复 发表于 2015-1-13 17:29
回复

使用道具 举报

752#
发表于 2015-1-13 17:29:51 | 只看该作者
不点 发表于 2015-1-13 17:27
我说一个方法,是我偏爱的。不用 git,而用 svn,这样可以一次性下载到 0.4.5 和 0.4.6 两个系列。

sv ...


我git用习惯了,觉得比svn 强大多了,也是挺方便的.

git下载的是整个版本库的内容,下载之后可以随时切换到任意版本(不需要联网),本地临时测试分支等.

用SVN就是切换版本需要重新下载源码

点评

2015-0109 修改后, 也能正常运行03PE-SATA。 F6IMG 彩色提示成功,没有垃圾显示(没加死循环检测)  详情 回复 发表于 2015-1-13 18:47
问题找出来了。 disk_io.c 中的 block_read_func() 中那段代码引起的。 这儿换成 1206, 就号了,能启动03PE-SATA. 差异报告,生产文件见附件。  详情 回复 发表于 2015-1-13 18:18
git 还是没有学会,觉得很不顺利。所以,我还是偏爱 svn 的老一套。  详情 回复 发表于 2015-1-13 17:32
回复

使用道具 举报

753#
发表于 2015-1-13 17:32:31 | 只看该作者
chenall 发表于 2015-1-13 17:29
我git用习惯了,觉得比svn 强大多了,也是挺方便的.

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

git 还是没有学会,觉得很不顺利。所以,我还是偏爱 svn 的老一套。

回复

使用道具 举报

754#
发表于 2015-1-13 17:48:03 | 只看该作者
本帖最后由 mdyblog 于 2015-1-13 17:51 编辑
不点 发表于 2015-1-13 17:27
我说一个方法,是我偏爱的。不用 git,而用 svn,这样可以一次性下载到 0.4.5 和 0.4.6 两个系列。

sv ...


1:
>>svn   co   -r   577   https://github.com/chenall/grub4dos   grub4dos_src

这个 577 怎么和版本对上关系, 哪儿有这个信息。


2:
svn 出错


git 能下,就是 不知道怎么 获得指定版本。
还是cvs简单明了。而且有个图形化的wincvs
回复

使用道具 举报

755#
发表于 2015-1-13 18:09:47 | 只看该作者
你还是用 chenall 在前面说的 git 方法吧。你的网络好像有问题,不支持 https 的 443 端口。

我的方法在我这里用很正常。


回复

使用道具 举报

756#
发表于 2015-1-13 18:18:10 | 只看该作者
本帖最后由 mdyblog 于 2015-1-13 18:21 编辑
chenall 发表于 2015-1-13 17:29
我git用习惯了,觉得比svn 强大多了,也是挺方便的.

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


问题找出来了。
disk_io.c 中的 block_read_func() 中那段代码引起的。
这儿换成 1206, 就号了,能启动03PE-SATA.
新源码,差异报告,生产文件见附件。

报告2.htm.7z

2.81 KB, 下载次数: 1

grub4dos-0.4.6a-2012-12-24Fix-20150113.7z

404.89 KB, 下载次数: 7

grub4dos_src-1224Fix.7z

732.69 KB, 下载次数: 1

回复

使用道具 举报

757#
发表于 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

回复

使用道具 举报

758#
发表于 2015-1-13 19:23:00 | 只看该作者
本帖最后由 chenall 于 2015-1-13 19:26 编辑

下载看了下,你的源码比较乱,生成的diff文件不知是基于什么版本的.

我只好自己弄了个1206版的源码和你上传的1224修正版的disk_io文件比较了下.

看起来只是撤销了f0350793的所有改动,这个应该不能算是修复吧(我前面也有说过出现问题的改动就是在这里),只要恢复了那肯定就可以的.

这个改动主要是解决你的前一个问题(map (hd0)x+yy )很慢的问题.你可以用1206版的源码测试一下(不要改动源码),再用1224的源码测试下

用git可以随时使用某个版本的源码.

第一种 方法是git checkout f035079这个是1224版本

如果你有改动过源码还没有commit不能直接切换,这时如果这些改动要保留的话可以git commit -m "xxxx"保存一下改动再切换

如果改动不想保留,可以直接强制切换1224版
git reset --hard f035079

1206版的同上.

点评

发现一个可能的"定时炸弹". 显然,一般观念上认为设备是扇区对齐的,最少是512字节对齐的。 但是g4d中似乎有一种间接的手段,来创建反例的设备。 那就是内存盘。可以是任意字节对齐的。 这种 实际和观念上  详情 回复 发表于 2015-1-14 11:01
搞定了。 目标码: 源码 下载页面下载的ZIP包修改的, 请BC3比较。 grub4dos-54b867e229fd26e4f44a349095d7f3d0596247e1\ =原始下载的zip包的源码。 new-grub4dos-54b867e229fd26e4f44a349095d7f3d0596247e  详情 回复 发表于 2015-1-14 04:24
目前,还不是“修复”, 而是定位出问题的代码行。  详情 回复 发表于 2015-1-14 01:02
回复

使用道具 举报

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

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


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

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

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

点评

额,思想不太一样.. 定位出问题的"代码行",我所谓的定位是具体到哪一行,你只是到哪一段. 那你前面的定位是浪费时间,我前面已经的说过了,就是这里的问题,可能你没有注意看()  详情 回复 发表于 2015-1-14 19:38
回复

使用道具 举报

760#
发表于 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中的优化,不关键。

点评

谢谢你的努力. 通过你改动的代码我终于发现了问题的原因.就是下面这一句 else if (filepos > blk_buf.cur_filepos) 这是我犯错了,本来是if (filepos > blk_buf.cur_filepos)没有else的,我上次改的时候没有  详情 回复 发表于 2015-1-14 19:51
回复

使用道具 举报

761#
发表于 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没有正常运行。



回复

使用道具 举报

762#
发表于 2015-1-14 19:38:57 | 只看该作者
mdyblog 发表于 2015-1-14 01:02
目前,还不是“修复”,
而是定位出问题的代码行。


额,思想不太一样..

定位出问题的"代码行",我所谓的定位是具体到哪一行,你只是到哪一段.

那你前面的定位是浪费时间,我前面已经的说过了,就是这里的问题,可能你没有注意看(我前面的一个链接)



回复

使用道具 举报

763#
发表于 2015-1-14 19:51:14 | 只看该作者
本帖最后由 chenall 于 2015-1-14 20:43 编辑


谢谢你的努力.

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

else if (filepos > blk_buf.cur_filepos)

这是我犯错了,本来是if (filepos > blk_buf.cur_filepos)没有else的,我上次改的时候没有注意看前后代码.

认为前面是

if (filepos < blk_buf.cur_filepos)

再判断

if (filepos > blk_buf.cur_filepos)

有点多余.没仔细看if (filepos < blk_buf.cur_filepos)里面的代码.


你可以测试一下附件看看是否正常.

点评

楼上grldr测试: 1) F6IMG 模拟, 成功 2) F6IMG 实机,暂时测试不了。那机器在使用中。 3)map 10G, 耗27秒。 [attachimg]206857[/attachimg]  详情 回复 发表于 2015-1-14 20:25
回复

使用道具 举报

764#
发表于 2015-1-14 20:10:55 | 只看该作者
{:soso_e160:}老师们辛苦了,喝杯茶!
“问题”浮出水面,看来我等伸手党有福了……
回复

使用道具 举报

765#
发表于 2015-1-14 20:25:23 | 只看该作者
chenall 发表于 2015-1-14 19:51
谢谢你的努力.

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

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

点评

map 10g的问题是由于我前面的附件是基于1224源码的. 我稍后上传一个基于最新版的源码上来.  详情 回复 发表于 2015-1-14 20:36
回复

使用道具 举报

766#
发表于 2015-1-14 20:36:08 | 只看该作者
mdyblog 发表于 2015-1-14 20:25
楼上grldr测试:
1) F6IMG 模拟, 成功
2)  F6IMG  实机,暂时测试不了。那机器在使用中。

map 10g的问题是由于我前面的附件是基于1224源码的.

我稍后上传一个基于最新版的源码上来.
回复

使用道具 举报

767#
发表于 2015-1-14 20:42:49 | 只看该作者
最新版本附件,请测试.

grub4dos-0.4.6a-2015-01-14.7z

270.38 KB, 下载次数: 34

点评

[attachimg]206859[/attachimg]  详情 回复 发表于 2015-1-14 21:13
回复

使用道具 举报

768#
发表于 2015-1-14 21:13:04 | 只看该作者
chenall 发表于 2015-1-14 20:42
最新版本附件,请测试.

回复

使用道具 举报

769#
发表于 2015-1-14 21:27:53 | 只看该作者
看起来应该是正常了.

点评

能不能先出个正式版。  详情 回复 发表于 2015-1-15 20:51
回复

使用道具 举报

770#
发表于 2015-1-15 20:51:05 | 只看该作者
本帖最后由 mdyblog 于 2015-1-15 20:56 编辑
chenall 发表于 2015-1-14 21:27
看起来应该是正常了.


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

使用道具 举报

771#
发表于 2015-1-15 21:17:10 | 只看该作者
??正式版?0.4.6a的正式版还早着呢,

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

点评

0.46a 2015.0115 出现 系统哦年份堆栈耗尽: [attachimg]206915[/attachimg]  详情 回复 发表于 2015-1-16 08:52
grub4dos-0.4.6a-2015-01-15.7z: 启动 03PE-sATA :OK [attachimg]206910[/attachimg]  详情 回复 发表于 2015-1-16 07:19
就 767# 楼的哪个。 先做一个下载版本。 至于其它功能, 后面在恢复, 然后再出个下载版本。  详情 回复 发表于 2015-1-15 22:16
回复

使用道具 举报

772#
发表于 2015-1-15 22:16:17 | 只看该作者
chenall 发表于 2015-1-15 21:17
??正式版?0.4.6a的正式版还早着呢,

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

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

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

使用道具 举报

773#
发表于 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

回复

使用道具 举报

774#
发表于 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 出现 系统堆栈耗尽:



我没有用 嵌套调用啊!


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

点评

你的脚本??? 目前 嵌套调用 保险区留了0x1000 也就是说从调用run_line命令时可以使用的的是(0x7000-0x3000)总共0x4000,超出的就报错. 我之前测试的时候计算了下, 嵌套调用一层太概需要304个字节,也就是说不  详情 回复 发表于 2015-1-16 09:20
回复

使用道具 举报

775#
发表于 2015-1-16 09:20:02 | 只看该作者
mdyblog 发表于 2015-1-16 08:52
0.46a 2015.0115 出现 系统堆栈耗尽:


你的脚本???

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

也就是说从调用run_line命令时可以使用的的是(0x7000-0x3000)总共0x4000,超出的就报错.

我之前测试的时候计算了下, 嵌套调用一层太概需要304个字节,也就是说不能 嵌套调用 太多层.

之前的版本用你的测试脚本,可以到79左右死机,其实是早就超出了系统可用的堆(这样会发生不可预料的错误)
你可以计算一下(0X7000-0X2000)/304

因为之前不点说过系统堆栈是从0x7000向下到0x2000,所以新版的限制了一下保留了0x1000.

如果不够用说明这个程序确实需要优化,当然我们也可以把保留区留小一些比如留个1KB,就是也不能保证够用.

点评

1) 用echo 跟踪流程。 发现是程序跑飞了。 莫名奇妙的往回跑 然后循环打印。 知道 打印 “系统堆栈耗尽”。 至于 为什么 换成新版 ,就这么奇怪, 还比清楚。 哦, 没和函数 我用 “goto :eof”返回的。  详情 回复 发表于 2015-1-16 11:41
1) 是我的脚本。 没有嵌套。 调用层级不超过9. 可能 是别的原因。 我再找找。 2) (0X7000-0X2000)/304=67 只能67层。 304? 怎么这么大? 用到 局部数组了吗? 用普通变量,得写道手酸。  详情 回复 发表于 2015-1-16 09:37
回复

使用道具 举报

776#
发表于 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  层

回复

使用道具 举报

777#
发表于 2015-1-16 11:41:59 | 只看该作者
chenall 发表于 2015-1-16 09:20
你的脚本???

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

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

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


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

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

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

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

点评

767#和下载站的是一样的源码的,效果应该是一样的. 我不明白你为什么一直强调要用767#的重新恢复?要恢复什么? 另外我对GRUB4DOS的内存布局不是很了解,不可能随意去改动内存布局的. 大了好多??我没有看出来大  详情 回复 发表于 2015-1-16 12:29
回复

使用道具 举报

778#
发表于 2015-1-16 12:03:44 | 只看该作者
好久没关注grub4dos了。
0115版的是否进一步限制了批处理的标签数量?
run用0110版测试正常,用0115版不能正常运行。经测试,发现标签在靠后的位置不能读取,将位置提前就能读取。

点评

建议 你试试 767# 那个版本。  详情 回复 发表于 2015-1-16 12:57
有发现什么问题,建议可以弄一个可以重现问题的环境或测试包(最好是能在虚拟中直接测试的)这样可以方便定位问题的原因.  详情 回复 发表于 2015-1-16 12:30
回复

使用道具 举报

779#
发表于 2015-1-16 12:29:30 | 只看该作者
mdyblog 发表于 2015-1-16 11:41
1)
用echo 跟踪流程。
发现是程序跑飞了。

767#和下载站的是一样的源码的,效果应该是一样的.

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

另外我对GRUB4DOS的内存布局不是很了解,不可能随意去改动内存布局的.

大了好多??我没有看出来大了很多呀.


点评

>> chenall 你可以把你的脚本上传上来看下,不太可能会乱跑的. 发表于 2 分钟前 我这是 MBROS系统。 UDM磁盘核心中。不是一个文件。不好拿出来。 我看 能不能模拟出问题。  详情 回复 发表于 2015-1-16 13:17
1) 大了 2K 2)可能是你加了debug 的原因。 前面的版本 是没有加 debug 的。 那是0109 上 直接修复那个 问题。 0110开始的debug 没有恢复。 debug 模块 不是很关键,所以希望 debug前发布一个下载版本。 这  详情 回复 发表于 2015-1-16 12:56
回复

使用道具 举报

780#
发表于 2015-1-16 12:30:17 | 只看该作者
zxw 发表于 2015-1-16 12:03
好久没关注grub4dos了。
0115版的是否进一步限制了批处理的标签数量?
run用0110版测试正常,用0115版不 ...

有发现什么问题,建议可以弄一个可以重现问题的环境或测试包(最好是能在虚拟中直接测试的)这样可以方便定位问题的原因.

点评

zxw
很遗憾,经测试与标签数量无关。 抽空简化了一个批处理版本,人为设置了125个标签,运行正常。  详情 回复 发表于 2015-1-16 14:19
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-23 02:58

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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