无忧启动论坛

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

一个新的命令解释器:v1.3 预览 wtcmd(by shoulea)

[复制链接]
61#
发表于 2010-9-21 12:15:53 | 只看该作者
原帖由 haijie1223 于 2010-9-21 09:42 发表
顶  希望早日成熟起来,源代码开放是进步的最大动力!

路漫漫兮其修远啊.................................
回复

使用道具 举报

62#
发表于 2010-9-25 17:54:52 | 只看该作者
咦,才发现,来支持了.
回复

使用道具 举报

63#
发表于 2010-9-25 18:26:40 | 只看该作者
貌似很好玩,又来一位强人!
回复

使用道具 举报

64#
 楼主| 发表于 2010-10-1 08:55:05 | 只看该作者
居然从“我的主题”列表消失了,来顶一下,正在更新,即将出台正式版。
回复

使用道具 举报

65#
 楼主| 发表于 2010-10-2 07:35:44 | 只看该作者
wtcmd(by shoulea) v1.1 readme

wtcmd 已经全面更新了!

新亮点1:人性化的语法

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

继 makeargv 这个重要函数之后,我又实现了一个名为 parsargv 的函数,它的使用使 wtcmd 的语法变得十分优美,而且命令的编写也更加容易了!

再次考虑 1.0 beta1 中消息框示例,那时我们的代码是:

    wtcmd mess "Hello, world!" -c hello -i i -m oc -t 5000

现在这个代码仍受支持,不过我们可以有更加漂亮的方式:

    wtcmd mess "Hello, world!" --caption=hello --icon=infomation --mode=OKCancel --timeout=5000

两个代码表示了完全相同的意思,但后者具有更好的可读性。

wtcmd 像 Unix 的命令行工具那样处理命令行参数,用“--”引导长选项,用“-”或“+”引导短选项。

对同一命令几乎总是可以同时使用全名(像上面的第二个代码)和缩写(如第一个代码),仅个别全名无缩写,全名与缩写可以混合使用。如可用下面代码实现同上面相同的效果:

    wtcmd mess "Hello, world!" -c hello -i i --mode=OKCancel -t 5000

命令的选项(指被“--”“-”或“+”所引导的参数)和普通可以用任意顺序指定,也就是说,上面的代码又可写作:

    wtcmd mess -c hello "Hello, world!" --mode=OKCancel -t 5000 --icon=information

大小写的限制完全去除,现在选项的名字或其缩写也可用大写字母,如:

    wtcmd mess -C hello "Hello, world!" --MODE=okcancel -t 5000 --icon=INFORMATION


新亮点2:形象的语法

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

数字、字符串和列表是重要的工具,对它们的处理方式直接决定命令文件的易写性和可读性,wtcmd 1.1 使用形象的语法对它们进行处理。

先看数字。calc 命令提供了对四则运算的完全支持,并可用括号任意嵌套。看下面的代码:

    wtcmd calc x = (3 + 2) * 7 ; mess $x

您将看到正确结果:35

再来看字符串。wtcmd 对字符串提供了最灵活的支持,可以用各种方法作用到目标字符串上,从而生成新的字符串,如:取子串,查找,替换,像 bat 用 %~dpnx1 的方式提取路径的各部分。

    wtcmd s = "012345" --left=3 ; mess $s

这取出了左边的 3 个字符。

    wtcmd s = "AxaxxAyxxa" "ax" "*" --replace ; mess $s

这将串中的子串“ax”全部换成了“*”。

    wtcmd s = "%windir%\system32\notepad.exe" --get=dnx ; mess $s

一个完整的路径分为“驱动器 driver -- d”“路径 path -- p”“名字 name -- n”“扩展名 extension -- x”四部分,上面只指定了“dnx”,因而结果为“C:notepad.exe”(假定非 PE,系统盘为 C)。

再看列表。可以向列表增元素,删除元素,也可用新元素替换部分元素。默认使用换行符“\n”作为分隔符(尤其是对操作符“<<”和“>>”,即 wtcmd 希望您逐行处理数据,这样高效而方便),但对于“<<”和“>>”之外的操作,您可以使用 --delimitor 选项或其缩写 -d 指定一个分隔符。

    wtcmd mess $path ; path : --add D:\Programs --delimitor=";" ; mess $path

通过两个消息框,您将看到 --add 操作向 path 搜索路径列表增加了一个新元素“D:\Programs”。

将下面的代码存为 d:\a.txt,用命令 wtcmd d:\a.txt 观看效果。

    list = ""
    list << "当前的临时目录为:"
    list << "%temp%"
    mess $list

<< 向列表增元素(使用换行符作为分隔符,而且不能改变),从而构造了一个具有两行文字的消息框。另请注意,现在同时接受“%”和“$”引导的环境变量展开。


新亮点3:强大的语法

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

wtcmd 现在完全支持了 C 语言支持的各种流程控制语句,while/for/if/switch 四种语句都得到了支持!

与 1.0 的配对方案 while ... loop 和 if ... end 不同,1.1 仅用关键字 sub/while/for/if/switch 开头,用同一个关键字 end 结尾。

看看 while 循环:

    i = 0
    while i < $#
        calc i += 1
        mess ${$i}
    end

将上述代码存为 d:\a.txt,用命令“wtcmd d:\a.txt a b c”观看效果,可以看到它用消息框显示了传递的参数“a b c”。

注意:$# 是传递的参数个数,而${$i} 是变量的多重展开,与 1.0 是一样的用法,只是不再支持随机数生成“$?”,作为替代,可用“num = --random”在变量 num 中获取一个随机数。

实际上,要想列举参数,可以用更棒的方法:

    for --argv
        mess $_
    end

除了参数,也可以用 for 语句在其他列表上作循环,也可以传递 --reverse 选项,这样可以反向遍历列表:

    for --reverse
        mess $_
    end

注意,其中列举参数是默认的操作,因此上面并没有再写出 --argv。上面两个代码中的“$_”即是列表中的当前元素。

if 语句现在是完整的语句(lmle 曾指出没有为 if 设计 else,其实是当前自己思路被搞混了,现在经过思考终于将其搞定了),甚至可以有 else if。

    x = 5
    if $1 > x
        mess "传递的数比 x 大。"
    else if $1 < x
        mess "传递的数比 x 小。"
    else
        mess "传递的数与 x 相等。"
    end

将代码存为 d:\a.txt,用命令“wtcmd d:\a.txt 5”观看效果。(非常抱歉,由于“-”作为负号与选项引导字符冲突,暂时不能传递负数,这将在将来得到修正。)

switch 语句是另一个很好用的语句:

    switch $1
    case "apple" "pear"
        mess "您传递的是一种水果。"
    case "panda" "cat"
        mess "您传递的是一种动物。"
    default
        mess "抱歉,不能作出判断。"
    end

不用我再说怎样观看效果了吧!


其他地方的改进

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

本次更新主要是核心的更新,80% 的代码经过了改进。最大的一点是现在可以同时编译为 ANSI 版本和 Unicode 版本,当然我们更喜欢 Unicode 版本,之所以使其也能以 ANSI 方式编译,是希望如果 DOS 或其他地方可能需要 wtcmd,改动的地方更小,实际上 util 中的代码,绝大部分现在已经可在 DOS 上用 Turbo C 编译了!

当然命令方面并非完全没有改进,实际上正由于 parsargv 的亮相,所有命令的选项分析都重新写过了,即是前面说的使得语法更优美。

由于 parsargv 使得命令选项的处理更容易,命令有了更多的灵活性,如 1.0 中用 file 命令删除文件时,如果以“\”开头,如“\pagefile.sys”会导致所有盘下的 pagefile.sys 被删除,现在这是一个可选的功能。

    rm \pagefile.sys

只删除当前盘下的 pagefile.sys,即“%CurDrv%\pagefile.sys”,而:

    rm \pagefile.sys --extension



    rm \pagefile.sys -x

与原来的做法具有相同的效果。

注意,原来的 FILE 命令其功能被分到了三条命令中:rm -- 删除(remove),cp -- 复制(copy),mv -- 移动(move)。

总之,wtcmd 正变得越来越易于使用,欢迎继续关注,并提出宝贵的意见与建议!


wtcmd v1.1 by shoulea
7:25 2010-10-2
回复

使用道具 举报

66#
发表于 2010-10-2 09:45:28 | 只看该作者

回复 #66 shoulea 的帖子

非常不错,楼主过节都在忙碌,辛苦了。
回复

使用道具 举报

67#
发表于 2010-10-2 12:50:44 | 只看该作者
楼主辛苦了,新版给人眼前一亮啊。
该写一个像PECMD那样的帮助了。不然我等菜鸟无从下手。
能写一些直接操作system、software等注册表文件的函数吗?PE下操作离线注册表很有优势。用挂载配置单元的方式,速度不够快,PECMD中挂载甚至是CMD下的两倍多。
如果可以的话,对编一些PE下的小软件很有好处。
回复

使用道具 举报

68#
 楼主| 发表于 2010-10-2 15:08:23 | 只看该作者

回复 #68 lmle 的帖子

之前之所以没有写帮助,是考虑到解释器不够成熟,变动很大很多,以前的帮助以后不能用,现在一定成熟了,将在下一个版本包含帮助。

你说的注册表操作不太明白,请再解释一下。如到时我做不了,也希望老九提供帮助。

在下一个版本中将包含文件/注册表读写、exe/dll资源的读取,也将支持读取一个如*.reg/*.inf等文件,对其作一个替换,将结果导出到临时目录,再加载。即相当于文件的预处理,我们知道*.inf文件尚可包含一个当前目录,而*.reg文件却只能写死路径,这样我们往往要在导入*.reg文件后再用 pecmd 进行修改,非常不方便,这一功能将解决这一问题。

将支持从内部/外部执行vbscript/javascript代码,DLL函数的调用,……

还将提供一个 browse 命令,不仅能浏览文件、文件夹,也能像改变快捷方式图标的对话框那样,浏览*.ico/*.exe/*.dll中的图标。

总之功能多多,更易使用,敬请期待!
回复

使用道具 举报

69#
发表于 2010-10-2 16:57:53 | 只看该作者
我说的注册表操作,是指在PE下操作原硬盘中的系统里的注册表(不是PE的注册表)。
例如,查看目标系统注册表Run下的自动运行程序。
我通常是用“reg load”命令,把“%SystemDir%\system32\config\SOFTWARE”文件挂载成配置单元,在用注册表相关命令去读取。这样做,挂载会花费较长时间,在配置低的电脑上像死机一般。
有没有可能写这样一个(一些)命令,不用把“SOFTWARE”等挂载成配置单元,就能读写“SOFTWARE”里的注册表项。
回复

使用道具 举报

70#
 楼主| 发表于 2010-10-2 17:12:53 | 只看该作者

回复 #70 lmle 的帖子

刚在网上查找了一下,发现原来没有这方面的工具,而且微软并不公开这方面的资料,因此可能比较困难。
回复

使用道具 举报

71#
发表于 2010-10-2 17:25:32 | 只看该作者
咱论坛的wang6071大大(wsyscheck作者)编写的Scanvirus能处理离线注册表。他应该有办法。可惜好久没看见他的踪影了。
回复

使用道具 举报

72#
 楼主| 发表于 2010-10-2 17:32:03 | 只看该作者
原帖由 lmle 于 2010-10-2 17:25 发表
咱论坛的wang6071大大(wsyscheck作者)编写的Scanvirus能处理离线注册表。他应该有办法。可惜好久没看见他的踪影了。


对啊,所以我认为就是应该公开源代码嘛,只有有了源代码,后来者才能进行增强,创建出更棒的工具。
回复

使用道具 举报

73#
发表于 2010-10-2 19:56:34 | 只看该作者
网上有pe下注册表重定向的。Runscanner 这个好象包里面有源代码的。你下载看看

期待这个命令解释器的完善,在适当的时候希望作者能出一个用这个解释器做的pe,来个示例。
Runscanner.rar (75.57 KB, 下载次数: 39)

也有可能那些是语言文件的,不是就算了。反正这个软件就可以了,也没有必要再重复劳动力。

[ 本帖最后由 freesoft00 于 2010-10-2 19:58 编辑 ]
回复

使用道具 举报

74#
发表于 2010-10-2 21:08:23 | 只看该作者
继续发展说不定什么时候可以把ac3顶下去了,干脆商业掉算了:)

持续关注中.
回复

使用道具 举报

75#
发表于 2010-10-2 22:03:51 | 只看该作者
看了楼主的wtcmd源代码,真后悔当初没把C学好学透彻。现在再学C不晚吧。
回复

使用道具 举报

76#
 楼主| 发表于 2010-10-2 23:44:09 | 只看该作者
原帖由 wbz2cdma 于 2010-10-2 22:03 发表
看了楼主的wtcmd源代码,真后悔当初没把C学好学透彻。现在再学C不晚吧。


呵呵,只要亲自写代码多了,就会越来越熟练。从大一到现在,正是在从学习C语言开始,经过数据结构和数值分析,及平时的练习,一点点提高的,实际上通过写这个 wtcmd,收获的更多。
回复

使用道具 举报

77#
 楼主| 发表于 2010-10-3 17:43:01 | 只看该作者
原帖由 freesoft00 于 2010-10-2 19:56 发表
网上有pe下注册表重定向的。Runscanner 这个好象包里面有源代码的。你下载看看

期待这个命令解释器的完善,在适当的时候希望作者能出一个用这个解释器做的pe,来个示例。
100812

也有可能那些是语言文件 ...


看了看,其功能和云端使用的技术似乎是一样的。云端其实主要就用了两种技术,一是注册表重定向,二是文件的重定向,如果我们掌握这两种技术,就能自由制作绿色软件,以后好好研究一下。
回复

使用道具 举报

78#
发表于 2010-10-7 14:03:47 | 只看该作者
持续关注中...
回复

使用道具 举报

79#
发表于 2010-10-7 14:31:03 | 只看该作者
功能越来越强大了,持续关注。
回复

使用道具 举报

80#
发表于 2010-10-7 18:44:01 | 只看该作者
支持LZ继续,

BUT,等功能齐全,没有明显错误时再来学习.
学习一个没有开发完善的工具,在我看来是没啥意思的
回复

使用道具 举报

81#
发表于 2010-10-9 17:39:44 | 只看该作者
楼主很强悍,发展的挺快
回复

使用道具 举报

82#
发表于 2010-10-9 20:52:49 | 只看该作者
没看明白。啥意思呢。
回复

使用道具 举报

83#
发表于 2010-10-9 21:09:38 | 只看该作者
太高级,没时间折腾,用现成的pe
回复

使用道具 举报

84#
发表于 2010-10-12 09:01:59 | 只看该作者
高手啊,强人啊,膜拜一下。代码看不懂也要收藏。
回复

使用道具 举报

85#
发表于 2010-10-12 09:11:45 | 只看该作者
确实是高人,关注很久了,可惜源码下载了,弄了几次也没办法编译。当然了,是自己太菜了。呵呵。
回复

使用道具 举报

86#
发表于 2010-10-12 10:26:34 | 只看该作者
很强大,支持一个。.
回复

使用道具 举报

87#
发表于 2010-10-12 11:28:26 | 只看该作者

回复 #1 shoulea 的帖子

最好的普及方法就是找个高手做一个经典的成品出来,就像老毛桃用老九的pecmd做的经典PE一样,现在pecmd已经深入人心,所以要求你的wtcmd一问世就必须是经典的开山之作,方便灵活的集成方法、能pecmd所不能的高效率解释器才是早日普及的真理,祝你早日成功!
回复

使用道具 举报

88#
发表于 2010-10-12 11:48:31 | 只看该作者
原帖由 myitmx 于 2010-10-12 11:28 发表
最好的普及方法就是找个高手做一个经典的成品出来,就像老毛桃用老九的pecmd做的经典PE一样,现在pecmd已经深入人心,所以要求你的wtcmd一问世就必须是经典的开山之作,方便灵活的集成方法、能pecmd所不能的高效 ...

脚本语言解释器这东西是两头难,功能强大的可能难学难用,如 c/c++ 语言及解释器;
简单易用易学的,可能就是功能有限,如 VB语言、AutoIt 脚本等。
做脚本解释器更是难上加难。
回复

使用道具 举报

89#
发表于 2010-10-13 10:19:32 | 只看该作者

回复 #89 lxl1638 的帖子

的确是这么回事,C太难了,记得我开始接触C的时候,搞个无图形界面的学生成绩管理系统都晕倒过两次,为了那次考试死了好多脑细胞!
回复

使用道具 举报

90#
发表于 2010-10-17 15:00:15 | 只看该作者
希望能尽快完善,老九有些定义歧义太多,譬如“!”的应用。如IFEX %W%\MMCW7.7z,EXEC =!CMD.EXE /C "XXX",就出现隐藏方式运行和ELSE冲突。有时弄得没办法那怕只有一个语句也逼得去用CALL。想起来真没劲的。

还有TEXT中出现格式关键字母也出问题,就连text THIS IS A TEST都显示不全。
不过有些功能的实现要做出来还是要花大量的时间的。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-10-5 09:33

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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