无忧启动论坛

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

支持含有碎片的文件仿真

    [复制链接]
721#
发表于 2015-1-10 14:53:51 | 只看该作者
目前的测试结果,看起来是%p%的内存被破坏了,运行到最后,这个内存的内容是乱码,所以导致死循环出现..

发现一个小问,按Q没有终止程序运行只是退出了,看来这个调试功能还有些问题.

点评

bat_run_script()中: if ((cmd_buff = grub_malloc(arg_len + 0x800)) == NULL) 为什么要加2K (0x800), 好浪费内存啊? 嵌套39次就是78K了。 还有,你那和系统堆, 初始化为多大,也就是总申请多大就会  详情 回复 发表于 2015-1-10 15:01
回复

使用道具 举报

722#
发表于 2015-1-10 15:01:24 | 只看该作者
chenall 发表于 2015-1-10 14:53
目前的测试结果,看起来是%p%的内存被破坏了,运行到最后,这个内存的内容是乱码,所以导致死循环出现..

发 ...


bat_run_script()中:

if ((cmd_buff = grub_malloc(arg_len + 0x800)) == NULL)

为什么要加2K (0x800), 好浪费内存啊?
嵌套39次就是78K了。

还有,那 系统堆, 初始化为多大,也就是说 总申请多大 就会崩溃?

点评

这个cmd_buff用途比较多 前面放保存文件名,中间是参数(参数可能很长,比如用ls | call :xxx之类的.) 后面的是命令缓冲区(因为命令需要处理变量等之后才能运行) 这个系统堆空间就很大了,32MB以上都是. 0x8  详情 回复 发表于 2015-1-10 15:21
回复

使用道具 举报

723#
发表于 2015-1-10 15:21:39 | 只看该作者
本帖最后由 chenall 于 2015-1-10 15:23 编辑
mdyblog 发表于 2015-1-10 15:01
bat_run_script()中:

if ((cmd_buff = grub_malloc(arg_len + 0x800)) == NULL)


这个cmd_buff用途比较多

前面放保存文件名,中间是参数(参数可能很长,比如用ls | call :xxx之类的.)

后面的是命令缓冲区(因为命令需要处理变量等之后才能运行)..

另外这个0x800也就是限制了批处理命令每行的长度,不能超过0x800个字符(实际上会更少估计0x700左右).

这个系统堆空间就很大了,32MB以上都是.

点评

》》这个系统堆空间就很大了,32MB以上都是. 这么大, 那 前面的 命令行栈,是否也可以放到对里面,或者申请2M的内存作为 命令行栈。 grub正常运行是什么模式,能 直接访问 32M 以上的地址? 默认模式,只能访问  详情 回复 发表于 2015-1-10 15:29
回复

使用道具 举报

724#
发表于 2015-1-10 15:29:52 | 只看该作者
本帖最后由 mdyblog 于 2015-1-11 10:07 编辑
chenall 发表于 2015-1-10 15:21
这个cmd_buff用途比较多

前面放保存文件名,中间是参数(参数可能很长,比如用ls | call :xxx之类的.)
...


》》这个系统堆空间就很大了,32MB以上都是.
这么大, 那 前面的 命令行栈,是否也可以放到堆里面,或者申请2M/8M 的内存作为 命令行栈。

grub正常运行是什么模式,能 直接访问 32M 以上的地址? (保护模式?)
默认实模式,只能访问 1M 地址啊。

如果是保护模式, 命令行栈 直接开8M算了(如果够)。



--------------------
前面的代码优化, 使得 call 不再大量消耗 命令行栈。

--------------------
还是原来“保护模式的栈分开”的设计原则更合理些 。
因为消耗最大的、也最难限制的 是 保护模式的栈。 保护模式栈 可以不受1M地址限制。

现在 主程序 工作在 保护模式。 实模式 只是 响应服务器(执行 响应函数。 响应含主程序请求)。 每次执行都很短,且对外不可见。
只要设计好了,实模式的栈深度是个 可预见的、不太大的 值。 一般2K,4K——32K,就够了。

ARM 中就有很多栈, 大部分和此处“实模式的栈”一样,只是 执行 响应函数,栈 一般也就2~~4K.
   只有(主程序用)主栈开得很大。

回复

使用道具 举报

725#
发表于 2015-1-11 20:13:18 | 只看该作者
请问C大, 如图的升级信息, 通过什么接口可以获得?


点评

这个目前看起来应该是 通过这个获取的http://grub4dos.chenall.net/atom.xml 不过这个也有缺点. 我打算另外提供一个JSON格式的接口,方便你们开发在线直接升级的程序. 如果没有什么问题的话,这几天应该可以  详情 回复 发表于 2015-1-12 09:10
回复

使用道具 举报

726#
发表于 2015-1-11 20:30:07 | 只看该作者
2014-0111测试 /F6IMG:


出现图上的垃圾显示.
最后没有提示F6IMG成功。

点评

新的版本只是处理了debug的问题,上次的测试的电脑是别人的,他拿走了,我需要另外找一到电脑测试. 现在的版本应该比较容易定位出问题的地方.  详情 回复 发表于 2015-1-12 09:11
回复

使用道具 举报

727#
发表于 2015-1-12 08:36:24 | 只看该作者
本帖最后由 不点 于 2015-1-12 08:59 编辑
如果是保护模式, 命令行栈 直接开8M算了(如果够)。


别开这种玩笑。grub4dos 从 0.4.5 开始保留 16M,后来又扩大到 32M 内存,内存占用已经够大,还能再增加 8M 的占用?就算增加到 8M 了,这够用吗?是不是还要增加到 64M 或 256M?


目前的堆栈空间是 0x7000 向下扩展至 0x2000,足够用了。如果程序设计不合理,无论多少堆栈也不够用,即使堆栈空间扩大到 4G 也不够用。


还是原来“保护模式的栈分开”的设计原则更合理些 。
因为消耗最大的、也最难限制的 是 保护模式的栈。 保护模式栈 可以不受1M地址限制。


和你的想法正好相反。保护模式的堆栈空间最容易控制,这由编程者直接控制,你只要优化程序,尽量不占用过多堆栈,就不会产生问题。而最难控制的是 BIOS 对实模式的堆栈的占用。要知道,BIOS 有恶意攻击的成分在内。保护模式的程序,都是咱自己设计的,还会有问题吗?如果不慎超限使用了堆栈造成死机,那么正好可以暴露程序的缺陷,修复它,让程序更健壮。肆意扩大堆栈的结果,就是能够容纳更多不良的程序,它们是隐患,不能及时被发现。

特殊情况下,如果应用程序需要使用超大量的堆栈,程序设计者可以在自己的保护模式程序中,自己开辟堆栈空间,然后切换到自己的保护模式堆栈。


点评

>> 别开这种玩笑。grub4dos 从 0.4.5 开始保留 16M,后来又扩大到 32M 内存,内存占用已经够大,还能再增加 8M 的占用?就算增加到 8M 了,这够用吗?是不是还要增加到 64M 或 256M? 目前的堆栈空间是 0x7000  详情 回复 发表于 2015-1-12 12:28
>> 和你的想法正好相反。保护模式的堆栈空间最容易控制,这由编程者直接控制,你只要优化程序,尽量不占用过多堆栈,就不会产生问题。 ..... 保护模式的程序,都是咱自己设计的,还会有问题吗?如果不慎超限使用  详情 回复 发表于 2015-1-12 12:15
回复

使用道具 举报

728#
发表于 2015-1-12 09:10:18 | 只看该作者
mdyblog 发表于 2015-1-11 20:13
请问C大, 如图的升级信息, 通过什么接口可以获得?

这个目前看起来应该是
通过这个获取的http://grub4dos.chenall.net/atom.xml

不过这个也有缺点.

我打算另外提供一个JSON格式的接口,方便你们开发在线直接升级的程序.

如果没有什么问题的话,这几天应该可以使用.我到时会给出一些介绍.
回复

使用道具 举报

729#
发表于 2015-1-12 09:11:33 | 只看该作者
mdyblog 发表于 2015-1-11 20:30
2014-0111测试 /F6IMG:

新的版本只是处理了debug的问题,上次的测试的电脑是别人的,他拿走了,我需要另外找一到电脑测试.

现在的版本应该比较容易定位出问题的地方.

点评

不知道如何自己编译ipxegrldr  详情 回复 发表于 2015-1-12 10:51
回复

使用道具 举报

730#
发表于 2015-1-12 10:51:48 | 只看该作者
chenall 发表于 2015-1-12 09:11
新的版本只是处理了debug的问题,上次的测试的电脑是别人的,他拿走了,我需要另外找一到电脑测试.

现在 ...

不知道如何自己编译ipxegrldr

1.png (16.44 KB, 下载次数: 199)

1.png

点评

把ipxe的源码下载到grub4dos-src/ipxe这个目录下. 会自动编译,不过看截图你用的是应该是我的那个编译环境 ,这个不支持编译ipxe  详情 回复 发表于 2015-1-12 11:14
回复

使用道具 举报

731#
发表于 2015-1-12 11:14:46 | 只看该作者
本帖最后由 chenall 于 2015-1-12 11:17 编辑
527104427 发表于 2015-1-12 10:51
不知道如何自己编译ipxegrldr


把ipxe的源码下载到grub4dos-src/ipxe这个目录下.
会自动编译,不过看截图你用的是应该是我的那个编译环境 ,这个不支持编译ipxe

其实也没有必要自己编译ipxegrldr的,直接使用ipxe.kpxe(之类undionly.kpxe),或ipxe.krn等加上内置菜单自动加载grldr就行了.

以下是ipxegrldr内置的ipxe菜单,如果网络正常的话总是使用最新版本的grldr.否则使用内置的,如果没有内置的就是用本地的(tftp服务器上)

  1. #!ipxe
  2. set use-cached 0
  3. dhcp
  4. imgload -a -n grldr0 -t 3000 http://b.chenall.net/grldr || goto embed
  5. imgfree grldr
  6. boot grldr0 || goto failed

  7. :embed
  8. imgload grldr
  9. boot grldr || goto failed

  10. :failed
  11. echo Booting failed, dropping to shell

  12. :shell
  13. shell
  14. goto shell
复制代码
回复

使用道具 举报

732#
发表于 2015-1-12 12:15:48 | 只看该作者
不点 发表于 2015-1-12 08:36
别开这种玩笑。grub4dos 从 0.4.5 开始保留 16M,后来又扩大到 32M 内存,内存占用已经够大,还能再增 ...

>>
和你的想法正好相反。保护模式的堆栈空间最容易控制,这由编程者直接控制,你只要优化程序,尽量不占用过多堆栈,就不会产生问题。
.....
保护模式的程序,都是咱自己设计的,还会有问题吗?如果不慎超限使用了堆栈造成死机,那么正好可以暴露程序的缺陷,修复它,让程序更健壮。肆意扩大堆栈的结果,就是能够容纳更多不良的程序,它们是隐患,不能及时被发现。
---------
我为什么说, "保护模式的堆栈空间最容易控制".

这是基于  “g4d 主流程 工作在 保护模式”而说的。
此时 要对g4d的用户开放。 实际用多少 堆栈空间, 不完全g4d 说了算。
还有,用户程序的设计算法。
如果 用户的程序中, call 嵌套调用。
那么, 堆栈将大概线性增长。
g4d的开发者, 无论预留多大堆栈, 都会爆的。
我下面的测试程序:
!BAT
set i=0
:FUN1
set /a  i=%i% + 1
set /a i0=%i% % 50
if %i0%==0 pause  loops=%i%
call  :FUN1


--------
质量最难控制的是用户程序——很多程序就是按DOS批处理设计的,很多人把call当goto用了。
   这个问题 PECMD中也存在,曾经一段时间,我不得不把堆栈设为100M。
   ---后来在说明中反复说明,CALL 尽量不要嵌套。


>>>
特殊情况下,如果应用程序需要使用超大量的堆栈,程序设计者可以在自己的保护模式程序中,自己开辟堆栈空间,然后切换到自己的保护模式堆栈。
------------
把你说的 是g4D的开发者吧。
那么, 还是 解决不了开放给使用者引入的问题。


>>
而最难控制的是 BIOS 对实模式的堆栈的占用。要知道,BIOS 有恶意攻击的成分在内。
-------------
我为什么说, "实模式的堆栈空间相对可控".
首先是相对  "保护模式的堆栈空间最容易控制" 而言的.


再说 "实模式的堆栈空间相对可控".
有 实模式 调用都是一个确定的函数,(对既定的g4d和机器)这样用多上堆栈——和用户程序算法无关。
BIOS 有专业公司开放的, 基本上算法是优化过的,反正比大部分G4D用户程序好。
很少用到 嵌套调用, 即使用到,也是经过数学证明的,次数是很小的。

BIOS调用64K堆栈还不够用的问题, 不用特别处理了, 直接当BUG处理了。
一般2k就够了。
BIOS调用64K堆栈还不够用的问题,应该没有的。
堆栈 问题, BIOS开放商,一定放到头号位置——绝不允许的。
BIOS调用16K堆栈还不够用,那么这家公司早就被淘汰出局了。

注意区分2类不同的问题。
1)是基本问题——全局的
2)功能问题——局部的
堆栈问题是前者,不会出现的。

BIOS 可能有功能问题——某个功能没提供或气功的形式不同。
其实我们碰到的BIOS问题,都是后者——这些都是可以接受的问题——否则这些公司就被淘汰出局了。
这是因为BIOS没有一个包含全部公司BIOS功能的强制标准。
这样, 提供的 功能集的大小不同。
超出基本强制标准 之外的特性各家也不同。

这不是什么 “攻击”。这是自然的生产现象。不只是BIOS, 也不只是IT,各行各业都一样。

处理这些问题,一般的用人海战术——穷举所有厂家的BIOS。
这不是我等担负得起的。
一般公司,也会谨慎使用的,相反,他会尽量避免这个问题,尽量缩小自己的边界。

如果这个称为 “攻击”——那么的小心,可能被怀疑 有  “被攻击”强迫症。


个人拙见,见谅。


点评

上海复旦大学的投毒杀人案,一审、二审被判死刑,而杀人者的律师说,不是故意杀人,判死刑太重了,要到最高法院继续申诉。 同一件事,众说纷纭,一点也不奇怪。持什么观点,都正常,没有不正常的观点。 最终的  详情 回复 发表于 2015-1-12 13:24
回复

使用道具 举报

733#
发表于 2015-1-12 12:28:24 | 只看该作者
不点 发表于 2015-1-12 08:36
别开这种玩笑。grub4dos 从 0.4.5 开始保留 16M,后来又扩大到 32M 内存,内存占用已经够大,还能再增 ...

>>
别开这种玩笑。grub4dos 从 0.4.5 开始保留 16M,后来又扩大到 32M 内存,内存占用已经够大,还能再增加 8M 的占用?就算增加到 8M 了,这够用吗?是不是还要增加到 64M 或 256M?


目前的堆栈空间是 0x7000 向下扩展至 0x2000,足够用了。如果程序设计不合理,无论多少堆栈也不够用,即使堆栈空间扩大到 4G 也不够用。
------------------------
1) 我没有说再增加8M,
相反会减少64K.
因为 将预留的 64K  命令行栈 取消。
转而, 在初始化市, 从(自由空间)堆中申请2M的内存,作为 命令行栈。

按C大说的, 堆是在后面的自由空间。

2)内存留着不用, 用户也得不到什么好处——闲着不让用(来提供更多功能)就是浪费!
现在那个机器没有个64M内存。
况且, 申请多少 也是动态的,如果真的内存很小,就少申请点。
回复

使用道具 举报

734#
发表于 2015-1-12 13:24:43 | 只看该作者
mdyblog 发表于 2015-1-12 12:15
>>
和你的想法正好相反。保护模式的堆栈空间最容易控制,这由编程者直接控制,你只要优化程序,尽量不占 ...

上海复旦大学的投毒杀人案,一审、二审被判死刑,而杀人者的律师说,不是故意杀人,判死刑太重了,要到最高法院继续申诉。

同一件事,众说纷纭,一点也不奇怪。持什么观点,都正常,没有不正常的观点。

最终的判决,肯定让一部分人满意,而让另一部分人不满意。这是无法避免的。

回复

使用道具 举报

735#
发表于 2015-1-12 15:38:48 | 只看该作者
本帖最后由 chenall 于 2015-1-12 15:45 编辑

根跟我的调试结果来看,应该是循环嵌套太多层导致的,看来有必要限制一下循环嵌套的层数.

另外发现F6IMG里面有许多不必要的循环.有必要优化一下.

就是不知一层需要多少的堆栈空间?这个有没有什么办法计算.比如调用某个函数需要多少堆栈空间,这个能计算出来吗?

好像和应该函数里面的变量和参数有关系?有没有什么保守的计算方法.这样就可以太概估计一下可以几层而不出问题.

点评

>>另外发现F6IMG里面有许多不必要的循环.有必要优化一下. 这件事 很麻烦的。 很多人写出来的代码算法没有优化。 有的是水平原因。 有的是对待此事的太多所致(没有认为是多么重要的事情,需要费力优化) —  详情 回复 发表于 2015-1-12 16:14
>>根跟我的调试结果来看,应该是循环嵌套太多层导致的,看来有必要限制一下循环嵌套的层数. 另外发现F6IMG里面有许多不必要的循环.有必要优化一下. 就是不知一层需要多少的堆栈空间?这个有没有什么办法计算.比如  详情 回复 发表于 2015-1-12 16:06
回复

使用道具 举报

736#
发表于 2015-1-12 16:06:51 | 只看该作者
本帖最后由 mdyblog 于 2015-1-12 16:22 编辑
chenall 发表于 2015-1-12 15:38
根跟我的调试结果来看,应该是循环嵌套太多层导致的,看来有必要限制一下循环嵌套的层数.

另外发现F6IMG里 ...


>>根跟我的调试结果来看,应该是循环嵌套太多层导致的,看来有必要限制一下循环嵌套的层数.

另外发现F6IMG里面有许多不必要的循环.有必要优化一下.

就是不知一层需要多少的堆栈空间?这个有没有什么办法计算.比如调用某个函数需要多少堆栈空间,这个能计算出来吗?

好像和应该函数里面的变量和参数有关系?有没有什么保守的计算方法.这样就可以太概估计一下可以几层而不出问题.
--------------------------------
你程序中有2个堆栈。
1)默认堆栈。
由于 你没有定义大的数组,
这个每次是很小的。
主要是定义的临时变量。

保守计算:
2层嵌套之间C函数调用次数N
最长路径临时变量总空间M,由于有优化,一个函数内部的所有 临时变量都算, 哪怕在调用函数的后面;并列代码块中的都算。

保守大小S1
指针字节数P=sizeof(char*)
S1=2NP +  M

并列路径函数取最大值。

不过实际比这个小得多。

最好的办法是,
判断sp寄存器。
设定最低限SPL  
SPL =栈底 + 保险长度
保险长度 可以取:  16+该函数中变量总内存。

在call: 函数 中
if(sp<=SPL)  { printf("\nFAULT: <<<<<<<<<<SYSTETM STATCK RUNOUT>>>>>>>>>\n");  return ; }

还有,作为验证,  把系统栈扩大到1M。  100次嵌套, 应该不会溢出的。


2) 命令行堆栈
最长命令行的L
保守大小S2
S2=NL

测试了下find_oem函数, 这个目前才嵌套30多次, 没有溢出。
这里没计算:  复合语句,转为嵌套。没研究G4D程序是否有这种嵌套。


作为验证,  把命令行堆栈扩大到1M。  

点评

是指cmd_buffer吗?这个我测试过了用了还不到一半只用了4KB左右.  详情 回复 发表于 2015-1-12 16:57
回复

使用道具 举报

737#
发表于 2015-1-12 16:14:26 | 只看该作者
chenall 发表于 2015-1-12 15:38
根跟我的调试结果来看,应该是循环嵌套太多层导致的,看来有必要限制一下循环嵌套的层数.

另外发现F6IMG里 ...

>>另外发现F6IMG里面有许多不必要的循环.有必要优化一下.

这件事 很麻烦的。
很多人写出来的代码算法没有优化。

有的是水平原因。
有的是对待此事的太多所致(没有认为是多么重要的事情,需要费力优化)
——优化本来就有风险。优化 一般用到条件边界。 很多错误就是优化引入的——编译器也是如此。

点评

这个估计和个人习惯也有关系.. 我自己写的代码,我会尽量优化(在时间能力允许的条件下),就当是学习. 刚开始写出来的可能就是勉强能用,以后经过一次一次改进优化. 现在如果限制一下嵌套层数那F6IMG估计就不能  详情 回复 发表于 2015-1-12 17:01
回复

使用道具 举报

738#
发表于 2015-1-12 16:57:17 | 只看该作者
mdyblog 发表于 2015-1-12 16:06
>>根跟我的调试结果来看,应该是循环嵌套太多层导致的,看来有必要限制一下循环嵌套的层数.

另外发现F ...
还有,作为验证,  把系统栈扩大到1M。  100次嵌套, 应该不会溢出的。

是指cmd_buffer吗?这个我测试过了用了还不到一半只用了4KB左右.
回复

使用道具 举报

739#
发表于 2015-1-12 17:01:12 | 只看该作者
mdyblog 发表于 2015-1-12 16:14
>>另外发现F6IMG里面有许多不必要的循环.有必要优化一下.

这件事 很麻烦的。

这个估计和个人习惯也有关系..

我自己写的代码,我会尽量优化(在时间能力允许的条件下),就当是学习.

刚开始写出来的可能就是勉强能用,以后经过一次一次改进优化.

现在如果限制一下嵌套层数那F6IMG估计就不能正常运行了.

点评

是现在的版本, 比1206版, 堆栈(系统堆栈和命令行堆栈(cmd_buffer))更少了吗? 如果不是, 那更大的概率, 应该不是这个原因。 强烈建议, 还是从1206版开始。 找BUG,比解决问题更难的。  详情 回复 发表于 2015-1-12 18:24
回复

使用道具 举报

740#
发表于 2015-1-12 18:24:16 | 只看该作者
本帖最后由 mdyblog 于 2015-1-12 18:25 编辑
chenall 发表于 2015-1-12 17:01
这个估计和个人习惯也有关系..

我自己写的代码,我会尽量优化(在时间能力允许的条件下),就当是学习.


是现在的版本, 比1206版, 堆栈(系统堆栈和命令行堆栈(cmd_buffer))更少了吗?

如果不是, 那更大的概率, 应该不是这个原因。

强烈建议, 还是从1206版开始。

找BUG,比解决问题更难的。
这其实是个很小的问题——不是什么关键问题。解决不难的。
并不涉及什么疑难杂症。

点评

对应的改动在这里没有修改cmd_buffer等相关代码. https://github.com/chenall/grub4dos/commit/f03507930d510dd9f7d1ef1f9385c42df5fd2f2a 看起来和上次的问题是一样,又是莫名其妙的. 现在的F6IMG,只要再增  详情 回复 发表于 2015-1-12 22:30
回复

使用道具 举报

741#
发表于 2015-1-12 22:30:08 | 只看该作者
mdyblog 发表于 2015-1-12 18:24
是现在的版本, 比1206版, 堆栈(系统堆栈和命令行堆栈(cmd_buffer))更少了吗?

如果不是, 那 ...


对应的改动在这里没有修改cmd_buffer等相关代码.

https://github.com/chenall/grub4 ... f1f9385c42df5fd2f2a

看起来和上次的问题是一样,又是莫名其妙的.出现的问题和修改的代码是毫无关系的.

现在的F6IMG,只要再增加一个判断语句防止重复的空循环就可以跳过这个BUG.(我用debug测试到后面跳过部份代码行就提示成功,但能不能用没有测试)

点评

测试结果: 1) 如果 加上死循环检测,并"exit" 那么, 之前的版本都能启动03PE-SATA。 测试了0111, 0110 1227 都会打印2行垃圾(前面帖子有图)。 只有 0111 不会显示 “Success” ------------- 2  详情 回复 发表于 2015-1-13 11:43
回复

使用道具 举报

742#
发表于 2015-1-13 11:43:48 | 只看该作者
本帖最后由 mdyblog 于 2015-1-13 11:45 编辑
chenall 发表于 2015-1-12 22:30
对应的改动在这里没有修改cmd_buffer等相关代码.

https://github.com/chenall/grub4dos/commit/f035 ...


测试结果:
1)
如果 加上死循环检测,并"exit"
那么, 之前的版本都能启动03PE-SATA。
测试了0111, 0110 1227

都会打印2行垃圾(前面帖子有图)。

只有 0111 不会显示 “Success”
-------------

2)
如果 死循环检测,并"exit 1"
即返回错误码,
都不显示 “Success”
记得 1227 显示失败。


3)
加上死循环检测,并"exit"

0111 生成的 TXTSETUP.OEM 和正常(1206)版不同。
奇怪的是,竟然也能启动!
文件见附加。
0111版: err0111.zip (1.39 KB, 下载次数: 2)

1206版: OK1206.zip (276.5 KB, 下载次数: 2)



看来还得从根本上解决啊!

点评

关键是根本的问题原因是什么???没有办法判断.前面的都只是猜测..经过调试我目前还是没有办法到找问题最终产生的原因..如果你能找得到最终的产生原因的代码那就好办了. 1.不是cmd_buffer的问题, 2,目前看起来也不  详情 回复 发表于 2015-1-13 13:51
回复

使用道具 举报

743#
发表于 2015-1-13 13:51:08 | 只看该作者
mdyblog 发表于 2015-1-13 11:43
测试结果:
1)
如果 加上死循环检测,并"exit"

关键是根本的问题原因是什么???没有办法判断.前面的都只是猜测..经过调试我目前还是没有办法到找问题最终产生的原因..如果你能找得到最终的产生原因的代码那就好办了.

1.不是cmd_buffer的问题,
2,目前看起来也不像是系统堆栈的问题,因为只是循环嵌套了还不到40层,根据你前面给的测试代码可以到70层的.

另外你若是按你的建议大不了就恢复到1206版的源码,但是这样子又产生了前面的问题.

我觉得根本不是修改了代码的原因,而是有一些未知的原因,就像之前前面的问题一样.

点评

>> 另外你若是按你的建议大不了就恢复到1206版的源码,但是这样子又产生了前面的问题. --- 不是说恢复到1206了事。 而是 恢复到1206, 再以此为起点。把曾经做过的改动,再原样,一点一点地恢复过去。 1)每恢复  详情 回复 发表于 2015-1-13 14:30
回复

使用道具 举报

744#
发表于 2015-1-13 14:30:56 | 只看该作者
本帖最后由 mdyblog 于 2015-1-13 14:34 编辑
chenall 发表于 2015-1-13 13:51
关键是根本的问题原因是什么???没有办法判断.前面的都只是猜测..经过调试我目前还是没有办法到找问题最终 ...


>>
另外你若是按你的建议大不了就恢复到1206版的源码,但是这样子又产生了前面的问题.
---
不是说恢复到1206了事。
而是 恢复到1206, 再以此为起点。把曾经做过的改动,再原样,一点一点地恢复过去。
1)每恢复一部分,再测试一下。
2)如果还是正常的,继续。
3)否则,代码修改,与最近正常的节点的差异减半。这样就能定位哪行代码为引起的问题。
4)“处理”该行代码。 (是"处理",而不是"研究"。要么纠正(明显的)错误,要么用替代方法——不明晰的问题)
5)然后继续。指导重要的功能都恢复了。

对程序远来说,很多问题,在定位出来前,根本

>>我觉得根本不是修改了代码的原因,而是有一些未知的原因,就像之前前面的问题一样.
--------
《易经》西方“菲罗教”(Phylosophy)不同。
《易经》中没有所谓的“原因”。
用《易经》来指导这件事。
简单明晰。
最终还是“敲入代码”——“道”。 要么“敲入这样的代码”——“道1”,要么“敲入那样的代码”——“道2”。
最终正确,还是 “敲入某一正确的代码”这个“道3” 而已。
回复

使用道具 举报

745#
发表于 2015-1-13 14:50:25 | 只看该作者
我前面#751已经贴上了出现问题的代码,这个代码也没有什么好修改的样子.

你有测试条件可以自己修改测试一下.反正在windows编译一下也是很简单的事情.

点评

GRUB4DOS编译器下载:http://code.google.com/p/grub4dos-chenall/downloads/detail?name=grub4dos_dev_2013-02-03.zip 这个打不开, 还有哪儿有?  详情 回复 发表于 2015-1-13 16:07
你那也可以测试的。 运行F6IMG 后 cmp (0)/TXTSETUP.OEM /ok1206/TXTSETUP.OEM 就知道是否正确。 --- 目前,先解决: 不出现 死循环(不是通过修改人家的代码)。 这个测试条件那儿都有的。  详情 回复 发表于 2015-1-13 14:54
回复

使用道具 举报

746#
发表于 2015-1-13 14:54:48 | 只看该作者
chenall 发表于 2015-1-13 14:50
我前面#751已经贴上了出现问题的代码,这个代码也没有什么好修改的样子.

你有测试条件可以自己修改测试一 ...


你那也可以测试的。
运行F6IMG 后
cmp  (0)/TXTSETUP.OEM   /ok1206/TXTSETUP.OEM   

就知道是否正确。


---
目前,先解决: 不出现 死循环(不是通过修改人家的代码)。
这个测试条件那儿都有的。


----
看代码,很难看出问题。  
回复

使用道具 举报

747#
发表于 2015-1-13 16:07:07 | 只看该作者
chenall 发表于 2015-1-13 14:50
我前面#751已经贴上了出现问题的代码,这个代码也没有什么好修改的样子.

你有测试条件可以自己修改测试一 ...


GRUB4DOS编译器下载:http://code.google.com/p/grub4dos-chenall/downloads/detail?name=grub4dos_dev_2013-02-03.zip

这个打不开,
还有哪儿有?

点评

http://dl.grub4dos.chenall.net/grub4dos_dev_2014-06-25.7z  发表于 2015-1-13 16:50
回复

使用道具 举报

748#
发表于 2015-1-13 16:32:23 | 只看该作者
我觉得 mdyblog 也是程序员,当然也可以自己编译版本,按照自己的思路进行编程或定位错误。mdyblog 可以放出修改后的版本,让大家测试。一旦测试成功,再经 chenall 检查没问题的话,即可融入主版本当中。

这样大家都能完全发挥自己的特点,达到自己的 “极致” 和 “最好”。

自己的思维方法,只有自己能深切领会,要让别人领会,那不是一件容易的事。

譬如说,我经常谈哲学。可是谁赞成呢?假如我把我的这套东西强加给别人,不断指责别人这也不符合哲学,那也不符合哲学,那么别人高兴吗?

自己的东西自己运用,那是没问题的。但假如把自己的思想意识强加给别人,那往往是行不通的。

我认识到,我自己需要得到尊重,别人也需要得到尊重。要尊重别人的哲学信仰、宗教信仰、认识水平和思想方法,不能把自己的思想当作说教,去教训别人。如果凌驾于别人之上,就是对别人的一种伤害或不尊重。
回复

使用道具 举报

749#
发表于 2015-1-13 17:21:59 | 只看该作者
git clone git://github.com/chenall/grub4dos.git grub4dos_src
-----------------
下载grubdos.a-20141206  grubdos.a-20141224,怎么下载?

点评

我说一个方法,是我偏爱的。不用 git,而用 svn,这样可以一次性下载到 0.4.5 和 0.4.6 两个系列。 svn co https://github.com/chenall/grub4dos grub4dos_src 如果是下载某次修订(比如第 577 次修订版  详情 回复 发表于 2015-1-13 17:27
回复

使用道具 举报

750#
发表于 2015-1-13 17:25:50 | 只看该作者
先看这个页面.

https://github.com/chenall/grub4dos/commits/0.4.6a

找到1206的对应版本ID(这里是d3ce711)
则下载完源码之后就可以这样
git checkout d3ce711 -b 1206 就有一个1206的版本了.

1224对应的版本ID是F035079
git checkout F035079 -b 1224
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-6-15 07:02

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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