无忧启动论坛

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

grub4dos 外部命令 wenv [2010-10-17 ]

  [复制链接]
271#
 楼主| 发表于 2010-9-26 14:36:34 | 只看该作者
原帖由 tuxw 于 2010-9-26 13:30 发表


我对g4d和wenv的源码从没看过,对框架完全不了解,突然入手要改个东西难度很大,而且容易引入BUG且短时间内发现不了。


呵呵,只要懂得点C很容易看懂WENV的,并没有想像中的那么难,我当初刚刚开始学C语言,就拿GRUB4DOS来研究。

因为不会用到C语言的函数库,所以我觉得很容易入门,因为不需要一开始就接触那么多函数,并且我一开始只看我能看懂的部份,慢慢的就了解了很多东西。

编写外部命令只要不调用C语言的函数就一般没有什么问题了,需要的函数如果G4D没有提供就要自己实现。
回复

使用道具 举报

272#
发表于 2010-9-26 18:56:25 | 只看该作者
原帖由 chenall 于 2010-9-26 14:36 发表


呵呵,只要懂得点C很容易看懂WENV的,并没有想像中的那么难,我当初刚刚开始学C语言,就拿GRUB4DOS来研究。

因为不会用到C语言的函数库,所以我觉得很容易入门,因为不需要一开始就接触那么多函数,并且 ...

函数库我倒不怕,我怕的是一大堆BIOS调用。N年前有一本裘伯君的《深入DOS编程》(好象是这个名字),花了很多心思才借到一本,看过之后对它很是抵触,那些底层的编程技术确实很酷(后来想来与没什么,只是因为信息不对称而已,那时书比较少,很难找到介绍底层的书籍),但通用性不好。很多例子实践过一遍后过不了多久就忘了,我从来就没记住过那些BIOS功能号调用号各种存器编号。那时耍酷对8253编程,直接用PC喇叭唱两只老虎,原理弄懂了,不过一星期后我就忘了那两个寄存号是多少了。所以看比较底层的代码时缺少动力,不过Grub4Dos功能越来越强,有空时还是有必要去研究下的。

[ 本帖最后由 tuxw 于 2010-9-26 18:58 编辑 ]
回复

使用道具 举报

273#
 楼主| 发表于 2010-9-26 20:45:49 | 只看该作者
原帖由 tuxw 于 2010-9-26 18:56 发表

函数库我倒不怕,我怕的是一大堆BIOS调用。N年前有一本裘伯君的《深入DOS编程》(好象是这个名字),花了很多心思才借到一本,看过之后对它很是抵触,那些底层的编程技术确实很酷(后来想来与没什么,只是因为 ...


嘻嘻,那些BIOS编程我没有研究过。
什么BIOS功能号调用号各种存器编号只是有了解了一点点而儿。

我目前接触的GRUB4DOS包括我写的外部命令都没有用过这些功能(CHKPCI除外),只是纯粹的C语言基本代码。

有空还是要把WENV再继续完善一下,或者找一个好用的SHELL代替GRUB4DOS内部的SHELL。
回复

使用道具 举报

274#
发表于 2010-9-28 23:26:20 | 只看该作者
@chenall大:
操作符 ! 怎么又取消了啊?
回复

使用道具 举报

275#
发表于 2010-9-29 08:47:50 | 只看该作者
WENV read 目前功能比较简单,外部文件里只能写单行的简单命令,复杂点带判断的好象不行
如果可以支持更复杂的命令,相当于给grub4dos增加了一个外挂库,功能性的代码可以独立出来,需要时read它就可以了
回复

使用道具 举报

276#
 楼主| 发表于 2010-9-29 11:34:42 | 只看该作者
原帖由 zxw 于 2010-9-28 23:26 发表
@chenall大:
操作符 ! 怎么又取消了啊?


没有啊,也许是意外?还是操作错误。。
回复

使用道具 举报

277#
发表于 2010-9-29 11:59:37 | 只看该作者

回复 #276 chenall 的帖子

9.27,!真的不灵了。
回复

使用道具 举报

278#
 楼主| 发表于 2010-9-29 12:40:21 | 只看该作者
原帖由 pseudo 于 2010-9-29 11:59 发表
9.27,!真的不灵了。


回头再查一下,可能哪里改错了。。
回复

使用道具 举报

279#
发表于 2010-9-30 09:03:53 | 只看该作者
@chenall大:!的问题纠正了么?
回复

使用道具 举报

280#
 楼主| 发表于 2010-9-30 10:06:55 | 只看该作者
已经找到原因,新的版本还没有上传。中午再上传。
回复

使用道具 举报

281#
发表于 2010-9-30 14:51:14 | 只看该作者
0925版 calc 还有问题


显示结果是64位,实际只处理了32位
回复

使用道具 举报

282#
 楼主| 发表于 2010-9-30 15:04:20 | 只看该作者
原帖由 tuxw 于 2010-9-30 14:51 发表
0925版 calc 还有问题

100633
显示结果是64位,实际只处理了32位


wenv 里面的calc是wenv内置的和grub4dos内部的不一样。

wenv里面的calc命令没有更新

可以通过wenv run calc来调用grub4dos内部的calc命令

另外wenv里面的处理好像也有些问题,得空还得再改改。。

[ 本帖最后由 chenall 于 2010-9-30 15:08 编辑 ]
回复

使用道具 举报

283#
发表于 2010-9-30 15:30:55 | 只看该作者
是的,发现了WENV calc对地址的计算也是与以前一样的

write 0x60000 0x35
calc *0x60000-0x30,不改变0x60000
wenv calc *0x60000-0x30,改变0x60000

通过run调用calc有问题很多,出错的结果还不重复,不建议这样用

[ 本帖最后由 tuxw 于 2010-9-30 15:41 编辑 ]
回复

使用道具 举报

284#
发表于 2010-9-30 16:15:32 | 只看该作者
减法好像有问题,不能减负数

另外,calc是64位计算的,而内存地址如0x60000的值是32位的,容易引起计算错误,如负数。

[ 本帖最后由 zhaohj 于 2010-9-30 16:34 编辑 ]

Snap1.jpg (21.92 KB, 下载次数: 68)

Snap1.jpg

Snap2.jpg (19.85 KB, 下载次数: 64)

Snap2.jpg
回复

使用道具 举报

285#
 楼主| 发表于 2010-9-30 16:29:02 | 只看该作者
原帖由 zhaohj 于 2010-9-30 16:15 发表
减法好像有问题,不能减负数



其实这些我没有考虑太多,当前只是弄出来暂用一下。。

而且-负数按你的例子语法也是错的。

因为扩展之后执行的是

calc 1--1

这样的语句,到底应该如何计算呢?

目前是从左到右的,所以计算方式是先1-- 然后剩下一个1,没有运算符了,所以出错。

其实目前的calc只是很简单的计算器,不要用来计算太复杂的东西。很多东西都没有完善的。

当然了你们也可以考虑修改一下CALC命令让它成为真正的计算器命令。

或者谁可以提供一个DOS计算器(命令行的)的源码,我看看能不能整进去。因为要考虑的东西太多了,懒得再去写一个新的。

[ 本帖最后由 chenall 于 2010-9-30 16:32 编辑 ]
回复

使用道具 举报

286#
发表于 2010-9-30 16:38:36 | 只看该作者
网上找到一个,不知是否有用

[ 本帖最后由 zhaohj 于 2010-9-30 16:41 编辑 ]

Calculator.zip

53.29 KB, 下载次数: 48, 下载积分: 无忧币 -2

vc

calc.rar

52.64 KB, 下载次数: 26, 下载积分: 无忧币 -2

c++

回复

使用道具 举报

287#
发表于 2010-9-30 16:50:17 | 只看该作者
原帖由 chenall 于 2010-9-30 16:29 发表



其实这些我没有考虑太多,当前只是弄出来暂用一下。。

而且-负数按你的例子语法也是错的。

因为扩展之后执行的是

calc 1--1

这样的语句,到底应该如何计算呢?

目前是从左到右的,所以计 ...


不用考虑减-的问题,因为无符号数会自动回绕
所以在分析${t1}时直接不要用-1,直接分析成一个64位无符号数0xFFFFFFFFFFFFFFFF就可以了,也就是WENV calc t1=-1时看到的返回结果,注意,这个结果是正确的,也就是说 wenv calc 本身是能处理负数的。

刚看了下wenv的代码,我估计是这个原因
static unsigned long calc (char *arg)
你内部计算已经是 unsigned long long了,但返回的是 unsigned long,所以只影响了结果32位

#284
你的 wenv calc 1-${t1} 跟我 #281 测试的结果不同,估计是你中间用了 wenv run calc 的结果,我发现这样用这后,会影响 wenv calc 和 calc,请重启后完全用 wenv calc  或 wenv run calc测试,不要两种用法交互使用

哦不是,我初始化是 wenv calc t1=-1,你的是 wenv set t1=-1
看来是wenv直接字符替换的结果,没有先将 ${t1} 先分析成数字

所以,在calc子命令处理表达式时先将 ${var} 变成数字,再计算,问题就解决了,而且减负数的问题也随之解决

[ 本帖最后由 tuxw 于 2010-9-30 17:11 编辑 ]
回复

使用道具 举报

288#
 楼主| 发表于 2010-9-30 19:08:40 | 只看该作者
回复

使用道具 举报

289#
发表于 2010-9-30 19:56:12 | 只看该作者
原帖由 chenall 于 2010-9-30 19:08 发表
试试新的WENV
http://grubutils.googlecode.com/files/wenv-2010-09-30.zip


回复

使用道具 举报

290#
发表于 2010-9-30 20:50:46 | 只看该作者
看代码时发现一个问题,判断子命令时没有长度判断,那么

wenv getttttt 是合法的命令,等同于 wenv get
回复

使用道具 举报

291#
 楼主| 发表于 2010-10-1 12:10:15 | 只看该作者
原帖由 tuxw 于 2010-9-30 20:50 发表
看代码时发现一个问题,判断子命令时没有长度判断,那么

wenv getttttt 是合法的命令,等同于 wenv get



嗯,目前大部份的GRUB4DOS命令都是这样的。^_^
回复

使用道具 举报

292#
 楼主| 发表于 2010-10-1 12:12:15 | 只看该作者
原帖由 tuxw 于 2010-9-30 19:56 发表


100665


因为没有取消前面的++和--运算符所以会这样子

使用类似如下的例子就正常了。
wenv calc a=1--1
回复

使用道具 举报

293#
发表于 2010-10-1 13:26:54 | 只看该作者
请教下chenall,外部命令最简单的编译环境如何搭建?
昨晚下了 MSYS 测试,snv下载代码,进去用 ./build 编译通过不过,难道为了编译个外部命令去装个Linux?
回复

使用道具 举报

294#
 楼主| 发表于 2010-10-1 18:43:58 | 只看该作者
原帖由 tuxw 于 2010-10-1 13:26 发表
请教下chenall,外部命令最简单的编译环境如何搭建?
昨晚下了 MSYS 测试,snv下载代码,进去用 ./build 编译通过不过,难道为了编译个外部命令去装个Linux?


外部命令目前只能在LINUX下编译...
推荐用COLINUX,方便,我目前就是用COLINUX下的UBUNTU编译的。

我的brsbox网盘中可以下载COLINUX+UBUNTU的安装包。

http://www.brsbox.com/chenall

下载密码是:GRUB4DOS

有兴趣的都可以下载试试。
回复

使用道具 举报

295#
发表于 2010-10-1 20:45:42 | 只看该作者
wenv 2001-09-30版本,在0pe测试提示为变量丢失。
回复

使用道具 举报

296#
发表于 2010-10-1 20:53:14 | 只看该作者
chenall大侠,近期在学习你的NTBOOT超级启动IMG,确实很棒,其中的BCD很小,不知道能不能公布其技术细节?从win7原版光盘中的BCD是256KB的,一般用于7PE映象启动的都是用这个文件,我看我的WIN7系统中的是32KB的,用它完全按256的编好菜单,但会蓝屏,不知你那个BCD从那里来的,我看了一下是一个菜单项,能不能加菜单项?

虽然我不知其技术细节,但我也改了一下,用来直接启动WIN7PE镜像。并放到了我的PE中,用来支持从非NT6.x的盘上启动。


刚才用小的将设备号改一下,似乎可以启动w7pe了,但象你那样动态改还是做不来,这个要对BCD的结构有研究。

[ 本帖最后由 hhh333 于 2010-10-1 21:18 编辑 ]
回复

使用道具 举报

297#
发表于 2010-10-2 01:27:49 | 只看该作者
原帖由 chenall 于 2010-10-1 18:43 发表


外部命令目前只能在LINUX下编译...
推荐用COLINUX,方便,我目前就是用COLINUX下的UBUNTU编译的。

我的brsbox网盘中可以下载COLINUX+UBUNTU的安装包。

http://www.brsbox.com/chenall

下载密码是 ...


下载了,在Win7和XP下测试
直接启动没反应(cmd闪一下)
安装服务后,ubuntu服务不能启动
回复

使用道具 举报

298#
 楼主| 发表于 2010-10-2 08:57:56 | 只看该作者
原帖由 tuxw 于 2010-10-2 01:27 发表


下载了,在Win7和XP下测试
直接启动没反应(cmd闪一下)
安装服务后,ubuntu服务不能启动



注意:colinux不能和其它虚拟机同时使用像VPC和VMWARE,当然了不能在虚拟机里面安装COLINUX
回复

使用道具 举报

299#
 楼主| 发表于 2010-10-2 08:59:53 | 只看该作者
原帖由 hhh333 于 2010-10-1 20:53 发表
chenall大侠,近期在学习你的NTBOOT超级启动IMG,确实很棒,其中的BCD很小,不知道能不能公布其技术细节?从win7原版光盘中的BCD是256KB的,一般用于7PE映象启动的都是用这个文件,我看我的WIN7系统中的是32KB的 ...



只需要用WINDOWS的注册表编辑器加载这个BCD文件,然后导出为一个新的就是小了。

当然可以增加菜单项。目前的BCD里面有3个菜单,一个是普通的,一个是WIM,还有一个VHD的。用BCDEDIT查看是只能看到一个。

因为经过了特殊处理。

一些细节,有空我再整理成图文的介绍。

[ 本帖最后由 chenall 于 2010-10-2 09:01 编辑 ]
回复

使用道具 举报

300#
发表于 2010-10-3 02:54:01 | 只看该作者
貌似colinux不能运行在64位系统下
在VMWARE里装个XP,在虚拟机里总算可以编译了(绕了好大一个弯)。但网络不正常,不能下载源码,只能在虚拟机与宿主间倒来倒去了
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-3 03:22

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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