无忧启动论坛

标题: 一个新的命令解释器:v1.3 预览 wtcmd(by shoulea) [打印本页]

作者: shoulea    时间: 2010-9-14 00:02
标题: 一个新的命令解释器:v1.3 预览 wtcmd(by shoulea)
改动非常多,代码框架基本形成,不会再发生很大变化,功能增强了许多,还有一些功能正在加入。

最近很忙,帮助没时间写,会编程的可拿去测试,用VS2003发的源代码。

可执行文件为控制台调试版,用“wtcmd learn”进入交互界面。

==========================================================================

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

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

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

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


==========================================================================


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

=======================================================================

calcexpr by shoulea

经过一天的努力,终于实现一个强大的表达式计算函数。

可以支持以下运算符的混合运算:

    基本的算术运算           + - * / ^

    专门用于整数的运算       div mod

    计算平方根               sqrt x

    计算绝对值               |x|

    截去小数部分             [x]

支持一元的+和-算符;

任意深度的括号嵌套;

可读取环境变量的值用于计算;

内置 pi 和 e 两个常数。

这一模块就不加入到 wtcmd 中了,因为我打算重新构造 wtcmd,写一个更强的核心。

calcexpr by shoulea
19:24 2010-9-18

==================================================================

wtcmd(by shoulea) v1.0 beta2 readme

实现了环境变量的读写及四则运算,现在可以演示循环和子程序的使用了。

还将运行库检测内存泄露的头文件<ctrdbg.h>包含了进来,如果解释器运行过程发生内存错误,则调试版解释器可给出诊断信息,这样可使解释器更为健壮。


示例1:使用 envi 的列表读写功能枚举参数
------------------------------------------------------------------
envi list = "$*"
while -s "$list"
    envi list > item -b
    mess "$item"
loop

将此代码存为“d:\no1.txt”,用命令“wtcmd d:\no1.txt a b c”进行测试,这将显示三个对话框,内容分别为“a”“b”“c”。

此程序将变量 list 初始化为传递给命令文件的参数表,然后用“envi >”命令每次读一个参数,当遍历了所有参数后,循环结束。

$* 代表传递的所有参数,如对“load a.txt a b c”,则 $* 即为“a b c”。

$* 是一个特殊的环境变量,解释器用环境变量 arg1、arg2、……对其进行展开。

展开 $* 涉及到参数的连接,如果参数有空格,则展开的结束未必与最初传递的一致,而且引号将对envi命令对参数的解释产生影响,因此这种枚举方法只适合传递的简单参数,最好不含空格。


示例2:使用变量的多重展开功能枚举参数
------------------------------------------------------------------
envi i = 0
while i < $#
    incr i
    mess "${arg$i}"
loop

将此代码存为“d:\no2.txt”,用命令“wtcmd d:\no2.txt a b c”进行测试,显示的消息框与上例相同。

此例相比于上例,更简洁也更安全,即使参数传递了空格,它也同样可以工作。

代码将变量 i 初始化为0,而后循环,即到其值超过传递的参数个数,命令“incr i”使变量 i 的值加一。

最有意思的是“${arg$i}”它实现参数的读取。由于 cmd.exe 默认用 % 引导环境变量,而 % 不能体现出层次关系,故改用 $ 引导环境变量,如果有简单变量 name,则使用“$name”即可。

如果想要反复展开,可将变量名部分放到“{}”中,如本例中有“{}”,解释器先展开 $i,这次有值1、2、3、……,然后再对“{}”执行一次展开,这一次展开的是“arg1”、“arg2”、……这正是传递的参数。


示例3:使用循环、四则运算及列表追加元素功能
------------------------------------------------------------------
envi item = "$? mod 5" -e
envi list = $item
while item != 0
    mess "$item 不为零,是否继续?" -m yn -iq -c Continue?
    if no
        break
    end
    envi item = "$? mod 5" -e
    envi list < $item -b
loop
mess "己结束,所得随机序列为:\n  $list" -ii -c Finish!

*** 此文件不必传递参数,您可以直接将“no3. random seq.txt”拖动到“wtcmd_debug.exe”上进行测试。

*** 调试版本的解释器为控制台应用程序,可以看到更为详细的解释过程。

每次遇到变量“$?”,解释器都用一个0~32767间的一个值将其展开,而本例中使用了取余运算符,这样每次都生成一个0~4的随机数。

当生成的随机数不为0时,循环将进行,并显示一个消息框询问是否产生更多的随机数,可以选“no”退出循环。

程序每次用命令“envi <”将元素追加到列表中,其中的“-b”用于指定分隔符,默认的分隔符为“;”,而“-b”将使得以空格作分隔符。


示例4:子程序设置、返回值及其检测
------------------------------------------------------------------
envi t = "$? mod 10" -e
call Example $t
if yes
    mess "子程序返回了“是”。" -ii
    exit
end
mess "子程序返回了“否”。" -is

_sub Example
    if $1 > 5
        return yes
    end
    return no
_end

此例有一个名为 Example 的子程序,它对传入的第一个参数进行检测,如果传入的值比 5 大,则返回“是 yes”,否则返回“否 no”。

注意:return 命令是 exit 命令的别名,两者是一样的。

程序的开始处,生成0~9的一个随机数,将其传递给 Example 进行判断,根据返回值显示不同的消息框。

下一步要实现 pecmd 中 team、find、ifex、forx 的等效命令,以使命令文件更简洁,在不使用命令文件时也能使用循环。

wtcmd v1.0 beta1 by shoulea
19:55 2010-9-15

==================================================================

wtcmd(by shoulea) v1.0 beta1 readme

发一个新的命令解释器,欢迎感兴趣的使用测试,并提出您宝贵的意见与建议。
程序目前实现的主要在核心部分,即命令文件/子程序调用,命令仅实现了几条,这种状况将迅速得到改善。
在下面的示例中,您可以使用与 pecmd 相同的方式使用本程序:命令文件(配置文件)或命令行直接调用。
下面请您将 wtcmd.exe 复制到系统目录:%SystemRoot%\System32,并打开命令提示符。
示例1:显示一个消息框
------------------------------------------------------------------
    wtcmd mess "Hello, world!" -c hello -i i -m oc -t 5000
您将看到一个具有“确定”和“取消”的消息框,其消息为“Hello, world!”,窗口标题为“hello”,5秒之后如果你不选择,对话框将自动关闭。
与 pecmd 大量使用符号进行分隔不同,wtcmd 使用了类 Unix 的命令行风格,使用选项指定参数,这可以更加灵活(也许有人会认为这会使命令更加冗长)。
在上一例中,“-c hello”指定了对话框的标题,“-c”中的“c”代表“caption”;
“-i i”中第一个“i”表示要指定对话框图标,而第二个“i”表示使用信息图标(information),一共有四种图标,你可以使用以下方式进行尝试:
    -i i        信息图标 information
    -i q        问号图标 question
    -i s        停止图标 stop
    -i w        警告图标 warning
也可将“-i i”完全省略,这样将没有图标。
“-m oc”指定了对话框的模式,其中的“oc”代表“确定 OK”与“取消 Cancel”,还有其它模式,请参考以后发公布的帮助文档,或者您也可以查看源代码。
注意:由于正处于测试阶段,这样缩写可能会发生改变,也欢迎对缩写提出宝贵建议,以便缩写的使用更为合理。
“-t 5000”表示如果5秒不选择,对话框将关闭。
通过这个例子您看到了 wtcmd 与 pecmd 的不同,并对本解释器有了一个感性的认识。
说明,每条命令都返回一个状态码,它可以被检测(对于 mess 命令,我们可以用这来判断用户的选择),详见后面的例子。

示例2:创建一个文件夹快捷方式
------------------------------------------------------------------
    wtcmd link d:\system c:\ -f
此命令将在 d: 下创建一个文件夹快捷方式,其目标为 C 盘。文件夹快捷方式终于得到了支持,普通快捷方式还是文件夹快捷方式,完全取决于其中的选项“-f”。
link 命令提供了 pecmd 相同的功能,但它使用选项予以指定,如下面的命令同样创建了文件夹快捷方式,但改变了图标:
    wtcmd link d:\system c:\ -f -i shell32.dll,7
是的您已发现选项常常可以省略,而且能以任意的顺序指定,如下面的命令与上命令效果相同:
    wtcmd link d:\system c:\ -i shell32.dll,7 -f
从这一点上讲,wtcmd 可以比 pecmd 更为灵活,增加选项、扩展起来也更加容易。
需要注意的是尽管解释器通常不区分大小写,但选项引导字符,如上面的“-i”和“-f”是区分大小写的(这样实现起来更容易一些)——因此建议对命令等均使用小写——欢迎对此发表意见。

示例3:挂载 WIM 镱像
------------------------------------------------------------------
    wtcmd moun d:\minint.wim Z:\Programs\minint
功能与 pecmd 差不多,不过多解释。
您可以使用“-w”选项使得镱像可写:
    wtcmd moun d:\minint.wim Z:\Programs\minint -w
为了卸载镱像,可以简单地传递一个目录:
    wtcmd moun Z:\Programs\minint
可以使用“-c”选项提交(commit)可写镱像发生的改变:
    wtcmd moun Z:\Programs\minint -c
wtcmd 对于卸载作为增强,你可以传递一个“-e”选项,e 代表“empty”,传递此选项时,解释器将尝试删除挂载目录的父目录或父目录的父目录等等中的空目录。
如本例假设执行
    wtcmd moun d:\minint.wim Z:\Programs\minint
前 Z 盘下并不存在 Programs 文件夹,则
    wtcmd moun Z:\Programs\minint -e
在卸载了镱像后,除删除 minint 目录外,Programs 目录也会被删除。您会发现这一功能有时是有用的。

示例4:删除文件
------------------------------------------------------------------
    wtcmd file -d \pagefile.sys
这一命令将删除所有驱动器下的“pagefile.sys”。wtcmd 增强了 pecmd 的 FILE 命令,以“\”开头的对象被认为与所有驱动器下的路径匹配。这一增强可能很有用,然而也可能有危险性,欢迎发表意见。
您可能奇怪,为什么前面的选项都在后面,而这里的选项“-d”却跑到了前面呢?
实际上我打算保持两种风格,一种是如“mess”、“link”和“moun”这种命令,它们的“参数 arguments”个数是固定的,这样将“选项 options”放到后面可避免头重脚轻;
另一种是 file 这类命令,它们可以接受多个“参数 arguments”,而且选项一般更简单一些,将选项放到前面,起类似“子命令”的作用。
    wtcmd file -d \pagefile.sys \*.tmp
除删除“pagefile.sys”外,还将删除各驱动根目录下的“tmp”文件。

示例5:使用命令文件
------------------------------------------------------------------
将下面文本存为“d:\first.txt”
    # This is a comment.
    mess "共传递了 $# 个参数。" -t 5000
执行命令:
    wtcmd load d:\first.txt a b c
您将获得一个消息框,告诉您传递了 3 个参数。
为了使命令文件(pecmd 所称配置文件)更为灵活,wtcmd 支持加载命令文件和调用子程序时传递参数,参数的个数用“$#”予以提取。
还有一系方法读取传递的参数,等待更详细的文档。

示例6:使用条件语句
------------------------------------------------------------------
条件语句 if 和循环语句 while 只能在命令文件中使用,将下面的文本存为“d:\second.txt”
    mess "是否要设置页面文件?" -i q -m yn -t 30000 -c question
    if return yes
        mess "正准备设置页面文件..." -t 3000
        # more code
    end
执行命令:
    wtcmd load d:\second.txt
将会看到一个对话框,如果选择“是”,将看到第二个对话框。
解释器还可以使用 while 循环语句,不过由于处理变量的 envi 命令还未完善,暂不给出示例。

wtcmd 目前才刚写出来,如果您什么的意义或建议,欢迎提出。刚出来的东西我们可以对其进行大量修改,以符合习惯,待以会成熟了,再改就比较困难了。
wtcmd 并不兼容 pecmd 配置文件,不过有许多地方是按 pecmd 的习惯来设计的。wtcmd 目前功能十分有限,您应该仅将其作为 pecmd 的补充来使用。
承诺永久公开 wtcmd 源代码,您可以修改以符合自己的需求,但修改后必需公开修改前后的源代码,并不能以 wtcmd 命令名解释器,源代码的任何部分也不能用于商业用途。
wtcmd 的构架十分灵活,可以这样说,任何一个主函数为原型“int wmain(int argc, wchar_t *argv[]);”的 C 程序均可通过修改 wtcmd 源代码的 3 处直接集成到解释器中。
老九长期致力于 pecmd 的维护,热切期待您的宝贵意见!

wtcmd v1.0 beta1 by shoulea
23:53 2010-9-13

[ 本帖最后由 shoulea 于 2010-11-24 23:20 编辑 ]

image.jpg (95.79 KB, 下载次数: 168)

image.jpg

wtcmd v1.0 beta1.rar

39.57 KB, 下载次数: 221, 下载积分: 无忧币 -2

wtcmd(by shoulea) v1.0 beta1

wtcmd(by shoulea) v1.0 beta2.rar

44.27 KB, 下载次数: 146, 下载积分: 无忧币 -2

calcexpr.rar

107.08 KB, 下载次数: 157, 下载积分: 无忧币 -2

wtcmd(by shoulea) v1.1.rar

45.12 KB, 下载次数: 239, 下载积分: 无忧币 -2

wtcmd v1.3 beta1.rar

65.35 KB, 下载次数: 90, 下载积分: 无忧币 -2


作者: pseudo    时间: 2010-9-14 00:13
下来看看,谢谢提供。
作者: lxl1638    时间: 2010-9-14 00:13
有点意思,看看,参考参考。
作者: zhangzsky    时间: 2010-9-14 00:17
不知道开发者是哪位?
作者: zhangze    时间: 2010-9-14 00:24
功能不太多吧?
主要是面向哪方面应用的?
和现在网上的那些程序比较
有什么优点和新功能呢
作者: myitmx    时间: 2010-9-14 00:50
真有意思!就是不知道以后主要攻哪方面应用,支持一下先!
作者: 网虫2008    时间: 2010-9-14 05:13
支持!

能实现文件夹快捷方式,太好了。

我觉得这个软件开始时的主攻方向和思路,最理想的就是先以对PECMD.EXE的补充为主,慢慢的再增加PECMD中的其他功能

不过刚才测试了一下,,把文件夹快捷创建到了开始菜单,,但只是个文件夹快捷,并没有像我在老九帖子中提到的那个带下拉选项的效果呀

[ 本帖最后由 网虫2008 于 2010-9-14 05:33 编辑 ]
作者: renchmin    时间: 2010-9-14 05:55
这个很有意思的啊,下来看看啊。
作者: kinglion    时间: 2010-9-14 08:08
嗯,支持一下,希望高效简洁。
作者: 左岸麦田    时间: 2010-9-14 08:17
支持下 有时间看看哈 辛苦了
作者: 2010shang1985    时间: 2010-9-14 08:19
这个不错。来学习了,对这个不怎么熟悉
作者: jianliulin    时间: 2010-9-14 08:25
请问这个项目可以用vs 2008 编译吗?
作者: Plantsoot    时间: 2010-9-14 09:36
强烈支持!也是我们新手学习的好材料。
作者: bsdx11    时间: 2010-9-14 09:42
如果楼主能坚持下去,这必将会成为PE下的一大利器!
作者: chouliu    时间: 2010-9-14 09:44
不错的新东东。虽才出现,功能不多,但相信会逐渐完善!支持!支持!
作者: bsdx11    时间: 2010-9-14 12:13
原帖由 friend8179 于 2010-9-14 09:56 发表
楼主好人,我就喜欢观摩牛人的代码

虽然我小白


写得不错
作者: wyl0205    时间: 2010-9-14 12:52
高手先整合一下 看看效果 我们这帮菜鸟再做实验
作者: freesoft00    时间: 2010-9-14 12:57
看好楼主,我也强烈支持
作者: bsdx11    时间: 2010-9-14 13:51
原帖由 freesoft00 于 2010-9-14 12:57 发表
看好楼主,我也强烈支持

很快会引领PE走向更高的高度
作者: shoulea    时间: 2010-9-14 14:08
原帖由 网虫2008 于 2010-9-14 05:13 发表
支持!

能实现文件夹快捷方式,太好了。

我觉得这个软件开始时的主攻方向和思路,最理想的就是先以对PECMD.EXE的补充为主,慢慢的再增加PECMD中的其他功能

不过刚才测试了一下,,把文件夹快捷创建到了 ...


你看一下是不是缺少了最后的“-f”选项。

新建 BMP 图像.JPG (133.61 KB, 下载次数: 157)

新建 BMP 图像.JPG

作者: shoulea    时间: 2010-9-14 14:27
原帖由 jianliulin 于 2010-9-14 08:25 发表
请问这个项目可以用vs 2008 编译吗?


wtcmd 是用纯C写成的,只在将来为支持VBScript和JavaScript会用标准C++实现个别COM组件,所用系统函数库可在“util.h”中找到,只静态连接有限的几个dll,其余函数均为MSVC运行库提供或自行实现,故本解释器可在各种VC编译器上编译。

建议在调试时用自己机器上的新版本编译,而发布时用VC6.0编译,以避免新编译器的庞大运行库,增强适用性。

解释器源代码用makefile进行维护,要编译可启动VC/VS的命令提示符,转到相应目录下,用命令:

    nmake

编译调试版本,用命令:

    nmake release=1

编译发布版本。

命令:

    nmake clear

可以清除生成的文件。

[ 本帖最后由 shoulea 于 2010-9-14 14:34 编辑 ]
作者: tuxw    时间: 2010-9-14 14:28
很不错,期待完善..
作者: bsdx11    时间: 2010-9-14 14:46
原帖由 shoulea 于 2010-9-14 14:27 发表
wtcmd 是用纯C写成的,只在将来为支持VBScript和JavaScript会用标准C++实现个别COM组件


很强大,希望尽快完善
作者: 冷风无泪    时间: 2010-9-14 23:31
很期待以后的前景,下个下来试试!
作者: yjstone    时间: 2010-9-15 00:24
支持新作,期待越来越强大。
作者: shoulea    时间: 2010-9-15 04:05
今晚实现了 envi 命令处理列表功能,这列表可以是各种列表:文本行的列表,字符串——字符的列表,二进制数据列表等等。

明天打算实现表达式的计算。
作者: HB天意    时间: 2010-9-15 08:37
功能稍少了些,期待更强大。
能够有效的对pecmd进行补充。
作者: bsdx11    时间: 2010-9-15 09:29
原帖由 shoulea 于 2010-9-15 04:05 发表
今晚实现了 envi 命令处理列表功能,这列表可以是各种列表:文本行的列表,字符串——字符的列表,二进制数据列表等等。

明天打算实现表达式的计算。


很好,更新的挺快,希望尽快强大起来
作者: bsdx11    时间: 2010-9-15 14:17
编译了一下,挺好的
作者: jianliulin    时间: 2010-9-15 15:08
楼主,能帮我看看我哪里弄错了?

我在vs2008 里面建了一个空的项目,然后把wtcmd的*.c,*.h的文件都加进项目里面去,编译的时候跑出两个异常:





[ 本帖最后由 jianliulin 于 2010-9-15 15:12 编辑 ]
作者: wanghh    时间: 2010-9-15 16:51
☆۩۞۩☆【谢谢提供!】 ☆۩۞۩☆
作者: shoulea    时间: 2010-9-15 17:31
原帖由 jianliulin 于 2010-9-15 15:08 发表
楼主,能帮我看看我哪里弄错了?

我在vs2008 里面建了一个空的项目,然后把wtcmd的*.c,*.h的文件都加进项目里面去,编译的时候跑出两个异常:
99631


99632


用VS2003编译没有发生错误,看截图发生的是连接错误,且错误编号为29、30,因此可能是前面某个文件未编译成功。

而看到缺少的两个函数为makelinev和strfile,因此应是util/file.c编译失败。

失败的原因可能是高版本的VS对C运行库函数的使用有些限制,曾经帮同学看代码时遇到使用fopen编译时就会出现警告,为成功编译代码也许需要设置某些选项,然而我现在没有VS2008,因此就不知道了,等上网查查再说吧。
作者: jianliulin    时间: 2010-9-15 18:16
原帖由 shoulea 于 2010-9-15 17:31 发表


用VS2003编译没有发生错误,看截图发生的是连接错误,且错误编号为29、30,因此可能是前面某个文件未编译成功。

而看到缺少的两个函数为makelinev和strfile,因此应是util/file.c编译失败。

失败的原 ...


按你#22说的方法可以在命令行编译通过

[ 本帖最后由 jianliulin 于 2010-9-15 18:19 编辑 ]
作者: shoulea    时间: 2010-9-15 20:21
实现了环境变量的读写及四则运算,现在可以演示循环和子程序的使用了。

还将运行库检测内存泄露的头文件<ctrdbg.h>包含了进来,如果解释器运行过程发生内存错误,则调试版解释器可给出诊断信息,这样可使解释器更为健壮。

下一步要实现 pecmd 中 team、find、ifex、forx 的等效命令,以使命令文件更简洁,在不使用命令文件时也能使用循环。
作者: lmle    时间: 2010-9-15 20:45
提个建议:
      最好能有像c语言的“{}”,用来表示一组命令序列。这样,在设计条件语句及循环语句的时候,既方便又直观。个人觉得,PECMD中用TEAM和“|”表示一组命令序列,不够方便、灵活。
      对不起,没有仔细看,原来已经用if…end、while…loop来支持命令组了。
      请问:if没有设计else子句?

[ 本帖最后由 lmle 于 2010-9-15 21:36 编辑 ]
作者: lxl1638    时间: 2010-9-15 20:47
看了一下,基本上可以认为是一种脚本解释器了,而不是命令解释器那么简单。
完善下去,做成一个国人的C++脚本解释器。不过对一般人来说,上手的要求可能就高些。

也提个建议,不要受PECMD那种落后的命令行方式限制,参照C++语法,做成真正的C++脚本解释器,而不是命令解释器。

[ 本帖最后由 lxl1638 于 2010-9-15 20:50 编辑 ]
作者: shoulea    时间: 2010-9-15 21:18
非常感谢大家的支持。其实我写这个解释器的原因这一,就是要积累经验,争取做一个简单的脚本解释器,既有严格但易懂的语法,又有易用的命令。
作者: shoulea    时间: 2010-9-15 21:51
原帖由 lmle 于 2010-9-15 20:45 发表
提个建议:
      最好能有像c语言的“{}”,用来表示一组命令序列。这样,在设计条件语句及循环语句的时候,既方便又直观。个人觉得,PECMD中用TEAM和“|”表示一组命令序列,不够方便、灵活。
      对不起 ...


if ... end,while...loop这样都是两个关键字配对的,便于任意地嵌套,加上 else 不好处理,其实最开始的时候不仅考虑过 else,甚至 else if 结构都考虑过,但后来发现关键字难以定位,就去掉了。其实命令文件往往没有那么复杂,没有 else 也没多大关系,多用几个子程序就可以了,else 分支可用提前调用 exit/return 退出子程序来模拟。
作者: zxw    时间: 2010-9-15 22:48
越看越有意思,有空研究一下。
作者: bsdx11    时间: 2010-9-16 09:15
原帖由 shoulea 于 2010-9-15 21:18 发表
非常感谢大家的支持。其实我写这个解释器的原因这一,就是要积累经验,争取做一个简单的脚本解释器,既有严格但易懂的语法,又有易用的命令。


不错,一定要保持体积不要太大
作者: shoulea    时间: 2010-9-16 15:59
发一个为 wtcmd 提供语法高亮显示的 editplus。

测试方法,解压文件后,后键点“script.inf”进行安装,再打开“editplus.exe”,选“文件-新建-其他-wtcmd”,现在输入代码即有高亮显示效果。

未命名.JPG (45.28 KB, 下载次数: 150)

未命名.JPG

editplus with wtcmd v1.0 beta2.part01.rar

240 KB, 下载次数: 41, 下载积分: 无忧币 -2

editplus with wtcmd v1.0 beta2.part02.rar

240 KB, 下载次数: 39, 下载积分: 无忧币 -2

editplus with wtcmd v1.0 beta2.part03.rar

240 KB, 下载次数: 40, 下载积分: 无忧币 -2

editplus with wtcmd v1.0 beta2.part04.rar

221.71 KB, 下载次数: 43, 下载积分: 无忧币 -2


作者: bsdx11    时间: 2010-9-16 20:04
很好用,太强大了,谢谢
作者: sbyguli    时间: 2010-9-17 08:48
高手纷纷登场啊!支持!希望弄个双PECMD更牛X的出来!方便大家使用!
作者: bsdx11    时间: 2010-9-17 10:10
原帖由 sbyguli 于 2010-9-17 08:48 发表
高手纷纷登场啊!支持!希望弄个双PECMD更牛X的出来!方便大家使用!


双PECMD??
作者: 66369    时间: 2010-9-17 10:43
看了下.

想替代老九PECMD.不大可能.况且老九在不断更新中.
作者: bsdx11    时间: 2010-9-17 10:55
希望楼主继续努力走下去,不要在乎别人的说法,最终必将成功
作者: lxl1638    时间: 2010-9-17 11:24
原帖由 66369 于 2010-9-17 10:43 发表
看了下.

想替代老九PECMD.不大可能.况且老九在不断更新中.


若完善后,会用的人是可以使用它代替 PECMD 的,PECMD 则重于命令解释,一般人上手觉得难度不大;
而这个工具则重于脚本解释,一般人上手的起点要求会高些。
实际上,用 AutoIt3 这个脚本解释器,或类似的工具,如 lua 也可以代替 PECMD 的,但能写脚本的人并不是很多。
所以 PECMD 走的路是,以命令解释为主,脚本解释为辅,每一个命令关键词就是一条命令,
每一条命令就象控制台命令一样能独立完成一项任务。一些控制台命令与PECMD命令的对比:

功能控制台命令PECMD命令
格式化FormatDFMT
执行另一命令StartEXEC
复制、移动、删除文件Copy、Ren、DelFILE
挂载映像ImageXMOUN


可以肯定地说,能写脚本的人并不多,能独立写完成脚本解释器的人更少,这个不是会编程的人就能完成的,本人支持楼主,做成一个国人的C++解释器。
另一方面,以脚本语言表达肯定比命令方式表达更自由、更灵活,这个工具一旦完善功能将十分强大。

也给楼主一些建议,不要受PECMD命令关键词是4个字母的习惯影响,参考C++语法的关键词和语言表达方式,作为PECMD的补充,走脚本解释为主,命令解释为辅的路。

[ 本帖最后由 lxl1638 于 2010-9-17 11:31 编辑 ]
作者: lsbzhe    时间: 2010-9-17 14:05
有意思,下载下来看看!
作者: shoulea    时间: 2010-9-17 16:34
原帖由 66369 于 2010-9-17 10:43 发表
看了下.

想替代老九PECMD.不大可能.况且老九在不断更新中.


我并不想做一个 pecmd 的替代品,如果那样做的话就要重复做一次老九的工作,这种重复劳动没有多大意义,况且 pecmd 很多功能是怎样实现的我也不明白,想做一个也做不出来啊。

此程序完善的理想结果,是做成一个比VBScript语法更灵活的脚本解释器,其中可直接嵌入命令——或者说将命令行格式吸呐为脚本语法——用命令行指定参数和选项的方式调用子程序/函数,同时命令的编写是模块化的,方便扩充、增强功能。

wtcmd 现在分为4个模块,其中command和util基本上是独立的模块,而core和expr目前的处理方式和 pecmd 没有太大差别,仍是直接解析字符串,惟一的差别在于我从VC的运行库中提炼出了一个名为 makeargv 的函数,简化了解析过程。这对于命令的处理已经足够,但对于表达式的处理就不够了,对于条件、循环的处理也不够灵活。

为了实现最终目标,编译原理的知识是必需的,然而我不是学计算机的,我只是非常喜欢编程,最想做一个编译器。以前好几次都打算好好学编译原理,但最终看一两章后都停下了,现在想来是实践太少。而这一次先不看书,完全凭自己感觉先做一个命令解释器,wtcmd v0,却感到非常有意思,后来经过一定完善即有现在的 v1。

大家的支持给了我很大的动力,现在我又在学编译原理,有了做这个命令解释器的经历,感觉很多东西也好理解多了,相信最终目标一定会实现!
作者: Plantsoot    时间: 2010-9-17 16:39
标题: 回复 #48 lxl1638 的帖子
老九很谦虚,不过老九大侠说的也很有道理。WTCMD和PECMD都是PE下的利器,按老九大侠的说法,二者到是可以互补的,侧重点不同,用途自然也不完全相同。

非常支持WTCMD的开发,也非常期待PECMD的继续完善,给我们初学者这么好的资料和工具,感激不尽!辛苦了。
作者: lxl1638    时间: 2010-9-17 19:19
原帖由 shoulea 于 2010-9-17 16:34 发表


我并不想做一个 pecmd 的替代品,如果那样做的话就要重复做一次老九的工作,这种重复劳动没有多大意义,况且 pecmd 很多功能是怎样实现的我也不明白,想做一个也做不出来啊。

此程序完善的理想结果,是做 ...


makeargv 本人看过,而不是直接用,它的原理是按匹配成对的' '(空格) 或 '"'(引号)拆分为命令行,将结果(命令行参数的个数和各个参数)丢给控制台程序的入口主函数。
在PECMD中,本人按它的原理写了自己的makeargv。

[ 本帖最后由 lxl1638 于 2010-9-17 19:20 编辑 ]
作者: shoulea    时间: 2010-9-17 19:38
控制台程序调用 GetCommandLine 获取命令传递的串,调用 stdargv.c 中的一个 static 函数生成 argc 和 argv,传递给 main 或 wmain。最开始的时候我用的 win32 API中的 CommandLineToArgvW 来实现各命令,但由于其最后一个指针不是空指针,遍历 argv[] 判断结束不方便,所有才从 stdargv.c 中修改了一个出来,后来又进一步分割,使得可从字串中读一个程序名,或一个参数。
作者: shoulea    时间: 2010-9-17 21:14
原帖由 bsdx11 于 2010-9-17 10:10 发表


双PECMD??


五笔:

cc = 双
xx = 比
作者: bsdx11    时间: 2010-9-18 10:36
希望搂住早日达到自己的目标
作者: shoulea    时间: 2010-9-18 19:35
经过一天的努力,终于实现一个强大的表达式计算函数。

可以支持以下运算符的混合运算:

    基本的算术运算           + - * / ^

    专门用于整数的运算       div mod

    计算平方根               sqrt x

    计算绝对值               |x|

    截去小数部分             [x]

支持一元的+和-算符;

任意深度的括号嵌套;

可读取环境变量的值用于计算;

内置 pi 和 e 两个常数。

这一模块就不加入到 wtcmd 中了,因为我打算重新构造 wtcmd,写一个更强的核心。

老九:可以把这个函数集成到 pecmd 中,增强 CALC 命令的功能,开启优化选项后代码仅增大约5~6KB。

image.jpg (124.73 KB, 下载次数: 135)

image.jpg

作者: Plantsoot    时间: 2010-9-18 20:03
标题: 回复 #56 shoulea 的帖子
可以推荐下编译WTCMD的工具吗?

这几天用 VC6.0 和 VS2010 都失败,请问老兄用的是 VS2003 ?
作者: shoulea    时间: 2010-9-18 20:10
标题: 回复 #57 Plantsoot 的帖子
你是怎样编译的?

我在VC6/VS2003的命令行,和VS2003的集成环境都编译通过。

jianliulin 在VS2008的集成环境编译失败#31,但在命令行编译也通过#34。

命令行编译方式见#22。
作者: Plantsoot    时间: 2010-9-18 20:25
标题: 回复 #58 shoulea 的帖子
我正在重装VC6,我的VC6是绿色版,命令行不好使。
vs2010 nmake报错,刚下载了个 安装版的VC6,试试看。

[ 本帖最后由 Plantsoot 于 2010-9-18 21:08 编辑 ]
作者: lxl1638    时间: 2010-9-18 21:56
原帖由 shoulea 于 2010-9-18 19:35 发表
经过一天的努力,终于实现一个强大的表达式计算函数。

可以支持以下运算符的混合运算:

    基本的算术运算           + - * / ^

    专门用于整数的运算       div mod

    计算平方根            ...


试试看。。。。。。。。。。。
作者: haijie1223    时间: 2010-9-21 09:42
顶  希望早日成熟起来,源代码开放是进步的最大动力!
作者: lxl1638    时间: 2010-9-21 12:15
原帖由 haijie1223 于 2010-9-21 09:42 发表
顶  希望早日成熟起来,源代码开放是进步的最大动力!

路漫漫兮其修远啊.................................
作者: junyee    时间: 2010-9-25 17:54
咦,才发现,来支持了.
作者: tzxinqing    时间: 2010-9-25 18:26
貌似很好玩,又来一位强人!
作者: shoulea    时间: 2010-10-1 08:55
居然从“我的主题”列表消失了,来顶一下,正在更新,即将出台正式版。
作者: shoulea    时间: 2010-10-2 07:35
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
作者: Plantsoot    时间: 2010-10-2 09:45
标题: 回复 #66 shoulea 的帖子
非常不错,楼主过节都在忙碌,辛苦了。
作者: lmle    时间: 2010-10-2 12:50
楼主辛苦了,新版给人眼前一亮啊。
该写一个像PECMD那样的帮助了。不然我等菜鸟无从下手。
能写一些直接操作system、software等注册表文件的函数吗?PE下操作离线注册表很有优势。用挂载配置单元的方式,速度不够快,PECMD中挂载甚至是CMD下的两倍多。
如果可以的话,对编一些PE下的小软件很有好处。
作者: shoulea    时间: 2010-10-2 15:08
标题: 回复 #68 lmle 的帖子
之前之所以没有写帮助,是考虑到解释器不够成熟,变动很大很多,以前的帮助以后不能用,现在一定成熟了,将在下一个版本包含帮助。

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

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

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

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

总之功能多多,更易使用,敬请期待!
作者: lmle    时间: 2010-10-2 16:57
我说的注册表操作,是指在PE下操作原硬盘中的系统里的注册表(不是PE的注册表)。
例如,查看目标系统注册表Run下的自动运行程序。
我通常是用“reg load”命令,把“%SystemDir%\system32\config\SOFTWARE”文件挂载成配置单元,在用注册表相关命令去读取。这样做,挂载会花费较长时间,在配置低的电脑上像死机一般。
有没有可能写这样一个(一些)命令,不用把“SOFTWARE”等挂载成配置单元,就能读写“SOFTWARE”里的注册表项。
作者: shoulea    时间: 2010-10-2 17:12
标题: 回复 #70 lmle 的帖子
刚在网上查找了一下,发现原来没有这方面的工具,而且微软并不公开这方面的资料,因此可能比较困难。
作者: lmle    时间: 2010-10-2 17:25
咱论坛的wang6071大大(wsyscheck作者)编写的Scanvirus能处理离线注册表。他应该有办法。可惜好久没看见他的踪影了。
作者: shoulea    时间: 2010-10-2 17:32
原帖由 lmle 于 2010-10-2 17:25 发表
咱论坛的wang6071大大(wsyscheck作者)编写的Scanvirus能处理离线注册表。他应该有办法。可惜好久没看见他的踪影了。


对啊,所以我认为就是应该公开源代码嘛,只有有了源代码,后来者才能进行增强,创建出更棒的工具。
作者: freesoft00    时间: 2010-10-2 19:56
网上有pe下注册表重定向的。Runscanner 这个好象包里面有源代码的。你下载看看

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

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

[ 本帖最后由 freesoft00 于 2010-10-2 19:58 编辑 ]
作者: yichya    时间: 2010-10-2 21:08
继续发展说不定什么时候可以把ac3顶下去了,干脆商业掉算了:)

持续关注中.
作者: wbz2cdma    时间: 2010-10-2 22:03
看了楼主的wtcmd源代码,真后悔当初没把C学好学透彻。现在再学C不晚吧。
作者: shoulea    时间: 2010-10-2 23:44
原帖由 wbz2cdma 于 2010-10-2 22:03 发表
看了楼主的wtcmd源代码,真后悔当初没把C学好学透彻。现在再学C不晚吧。


呵呵,只要亲自写代码多了,就会越来越熟练。从大一到现在,正是在从学习C语言开始,经过数据结构和数值分析,及平时的练习,一点点提高的,实际上通过写这个 wtcmd,收获的更多。
作者: shoulea    时间: 2010-10-3 17:43
原帖由 freesoft00 于 2010-10-2 19:56 发表
网上有pe下注册表重定向的。Runscanner 这个好象包里面有源代码的。你下载看看

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

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


看了看,其功能和云端使用的技术似乎是一样的。云端其实主要就用了两种技术,一是注册表重定向,二是文件的重定向,如果我们掌握这两种技术,就能自由制作绿色软件,以后好好研究一下。
作者: chenall    时间: 2010-10-7 14:03
持续关注中...
作者: spadek    时间: 2010-10-7 14:31
功能越来越强大了,持续关注。
作者: junyee    时间: 2010-10-7 18:44
支持LZ继续,

BUT,等功能齐全,没有明显错误时再来学习.
学习一个没有开发完善的工具,在我看来是没啥意思的
作者: bsdx11    时间: 2010-10-9 17:39
楼主很强悍,发展的挺快
作者: xhj    时间: 2010-10-9 20:52
没看明白。啥意思呢。
作者: peak8    时间: 2010-10-9 21:09
太高级,没时间折腾,用现成的pe
作者: HuAnGkUn    时间: 2010-10-12 09:01
高手啊,强人啊,膜拜一下。代码看不懂也要收藏。
作者: Plantsoot    时间: 2010-10-12 09:11
确实是高人,关注很久了,可惜源码下载了,弄了几次也没办法编译。当然了,是自己太菜了。呵呵。
作者: zxw    时间: 2010-10-12 10:26
很强大,支持一个。.
作者: myitmx    时间: 2010-10-12 11:28
标题: 回复 #1 shoulea 的帖子
最好的普及方法就是找个高手做一个经典的成品出来,就像老毛桃用老九的pecmd做的经典PE一样,现在pecmd已经深入人心,所以要求你的wtcmd一问世就必须是经典的开山之作,方便灵活的集成方法、能pecmd所不能的高效率解释器才是早日普及的真理,祝你早日成功!
作者: lxl1638    时间: 2010-10-12 11:48
原帖由 myitmx 于 2010-10-12 11:28 发表
最好的普及方法就是找个高手做一个经典的成品出来,就像老毛桃用老九的pecmd做的经典PE一样,现在pecmd已经深入人心,所以要求你的wtcmd一问世就必须是经典的开山之作,方便灵活的集成方法、能pecmd所不能的高效 ...

脚本语言解释器这东西是两头难,功能强大的可能难学难用,如 c/c++ 语言及解释器;
简单易用易学的,可能就是功能有限,如 VB语言、AutoIt 脚本等。
做脚本解释器更是难上加难。
作者: myitmx    时间: 2010-10-13 10:19
标题: 回复 #89 lxl1638 的帖子
的确是这么回事,C太难了,记得我开始接触C的时候,搞个无图形界面的学生成绩管理系统都晕倒过两次,为了那次考试死了好多脑细胞!
作者: hhh333    时间: 2010-10-17 15:00
希望能尽快完善,老九有些定义歧义太多,譬如“!”的应用。如IFEX %W%\MMCW7.7z,EXEC =!CMD.EXE /C "XXX",就出现隐藏方式运行和ELSE冲突。有时弄得没办法那怕只有一个语句也逼得去用CALL。想起来真没劲的。

还有TEXT中出现格式关键字母也出问题,就连text THIS IS A TEST都显示不全。
不过有些功能的实现要做出来还是要花大量的时间的。
作者: shoulea    时间: 2010-10-18 23:27
努力工作中……

[ 本帖最后由 shoulea 于 2010-10-21 12:52 编辑 ]
作者: M    时间: 2010-10-24 16:46
刚看见,特来用心支持下楼主和各位高人。确实了不起。
作者: 2010hook    时间: 2010-11-13 07:02
请问怎么替换PECMD?要修改那些文件?怎么修改?
谢谢!

PS:解决了!用注册表编辑器加载配置单元 SETUPREG.HIV ,然后搜索pecmd
我知道两者的定位,我只是想试用一下而已。

[ 本帖最后由 2010hook 于 2010-11-14 02:54 编辑 ]
作者: shoulea    时间: 2010-11-13 17:29
标题: 回复 #94 2010hook 的帖子
我的目的不是要替换PECMD,要知道我并非什么都懂的,对于怎样启动到explorer.exe和驱动的加载问题我是一窍不通,这就决定了只能用PECMD来引导。

这个解释器只是最初一些想法发展而来,希望能在某些工作上比使用其他批处理工具更方便一些,并提供一个方便扩展的机制及开放的源代码,希望大家一起努力创造出一个易于使用的工具。

wtcmd很久没有更新了,一方面是没有较执续的空闲时间——如国庆长假之类——因为我也得上课,兴趣也常会转移到其他方面;另一方面是对wtcmd的设计处于徘徊之中,追求完美这个糟糕的想法——害人不浅——常使我将代码改了又改,而最后又不了了之,反而连最基本的都没做好。对各位支持者,我深表歉意!

不过大家放心,在最坏的情况下,我会在寒假弄好下一个版本(其特性见顶楼),或者哪时有“较执续的空闲时间“,我也会认真而努力地去弄。
作者: jianliulin    时间: 2010-11-13 20:59
建议lz参与grub4dos的开发,要是能让grub4dos支持你的脚步解析就功德无量了!!!
作者: shoulea    时间: 2010-11-13 23:38
标题: 回复 #96 jianliulin 的帖子
对于grub4dos我确实充满了向往,不过自己的水平自己清楚,现在还差得远呐,那些系统底层的东西一点都不了解。说到脚本解析,我非常欢迎有需要的把wtcmd的模块拿去修改组装。另外grub2好像在向这一方面努力,那个可能会更牛B一些。wtcmd那些控制结构虽然看起来工作得很好,但其实现其实是很低级的,效率也不高,还是那个词”编译原理“啊……
作者: jianliulin    时间: 2010-11-14 09:14
原帖由 shoulea 于 2010-11-13 23:38 发表
对于grub4dos我确实充满了向往,不过自己的水平自己清楚,现在还差得远呐,那些系统底层的东西一点都不了解。说到脚本解析,我非常欢迎有需要的把wtcmd的模块拿去修改组装。另外grub2好像在向这一方面努力,那个 ...


维护grub4dos 并不定就需要懂底层的,可以维护应用层的东西,比如现在chkpci ,wenv 等,wenv 和你的脚本很像。grub2已经支持lua脚本,且功能十分强大,要是你有兴趣去协助bean开发burg那也是启动爱好者的福气

[ 本帖最后由 jianliulin 于 2010-11-14 09:15 编辑 ]
作者: shoulea    时间: 2010-11-14 11:00
标题: 回复 #98 jianliulin 的帖子
谢谢你的鼓励啦,我会向那方面努力的。另外现在直接改用VS2003写编写wtcmd了,因为我觉得这样调试更方便一些,虽然这样对代码的管理不太灵活,各有取舍吧,相信这样以后拿到VS2008上就不会出现不能编译的情况了。
作者: shoulea    时间: 2010-11-24 23:21
改动非常多,代码框架基本形成,不会再发生很大变化,功能增强了许多,还有一些功能正在加入。

最近很忙,帮助没时间写,会编程的可拿去测试,用VS2003发的源代码。

可执行文件为控制台调试版,用“wtcmd learn”进入交互界面。

wtcmd v1.3 beta1.rar

65.35 KB, 下载次数: 21, 下载积分: 无忧币 -2


作者: shoulea    时间: 2010-11-25 23:29
beta2 完成,添加了各种字符串处理函数。

wtcmd v1.3 beta2.rar

95.35 KB, 下载次数: 29, 下载积分: 无忧币 -2






欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3