无忧启动论坛

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

[更新376#2825]PECMD2012.1.80.13_Win32_64.多窗口多线程.裸机系统2.3.3.1+18M酷M...

    [复制链接]
5401#
发表于 2013-4-12 10:41:30 | 只看该作者
第一二个问题其实是一个问题,先是想要删除某项下面的所有其他键和项,结果只查到删除整个项,于是就想先删掉整个项建一个空的,但是又没找到建空项的写法。
这样的话要删掉某项下所有项就得先删掉整个项,建一个有默认值或者其他键的项,然后再删除默认值或者这个dummy键,这就要3步才能完成了,虽然也可以做到,但是感觉有点不给力,调用系统命令的话只要一行就搞定了:
EXEC =!REG delete REGI REGI HKLM\SYSTEM\123 /va /f
但是相邻的其他注册表操作都用 REGI 命令的情况下突然夹进一条 EXEC REG 感觉不大协调而已。

用 @ 导入二进制数据的时候,感觉用这个命令很多时候是会直接从注册表导出文件来转换成 REGI 命令,@的不便之处有2个,一个是@后面的十六进制必须加 0x 前缀(可否改成 @后加一个x 即 @x 之后就识别没有0x前缀的连续十六进制值),一个是不能换行,再多数据都得挤在一行里面,遇到数据量到多不少的就有点尴尬了,而且现在的换行试了很多次,怎么写导入的数据都不对。
\ 的格式还好吧,\后面的空格个人认为是有必要的,免得和\n这样的转义搞混(虽然 pecmd 貌似没有 \n 可以写在命令开头的用法)

另外,MSTR 和 LPOS** 及 LPOS*** 的 -delims:参数不识别转义吗? -delims:\n 这样的写法貌似无效。
回复

使用道具 举报

5402#
发表于 2013-4-12 12:19:23 | 只看该作者
410-01版的MSTR貌似又出问题了,MSTR &&DRV=<8> 1  7  1  1073774080  41878638080  2097215  42952412160  C: 返回的是空串
回复

使用道具 举报

5403#
 楼主| 发表于 2013-4-12 16:08:22 | 只看该作者
2010qaqz111 发表于 2013-4-12 12:19
410-01版的MSTR貌似又出问题了,MSTR &&DRV= 1  7  1  1073774080  41878638080  2097215  42952412160  C: ...

PECMD2012.1.77.1-130410-02.多窗口线程孵化版_win32_64.sfx.zip:

1> REGI    **16   支持16进制数,不必0x前缀 。 (@或#均适用)

2> REGI  **0  KEYPATH\!     //清除键,自己还留着

3> REGI  **0  KEYPATH\=     //建立一空键

4》 MSTR 和 LPOS** 及 LPOS*** 的 -delims:参数支持转义 \n \r \t \v \f \b

5> MSTR &&DRV=<8>...             MSTR &&DRV=<-1> ...
回复

使用道具 举报

5404#
发表于 2013-4-12 17:55:56 | 只看该作者
本帖最后由 2010qaqz111 于 2013-4-12 18:05 编辑
mdyblog 发表于 2013-4-12 16:08
PECMD2012.1.77.1-130410-02.多窗口线程孵化版_win32_64.sfx.zip:

1> REGI    **16   支持16进制数,不 ...


谢谢!16进制方便很多了!

REGI **16 HKLM\SYSTEM\123\912=@ 12 31 20
                              \ 55 56 77
                              \ 78 99 99
这种写法生成的键值仍然还有问题,红颜色的两个字节掉了。



对了还有 REGI **0 的说明,在注册表里看到像文件夹一样的,M$的官方名称叫做“项”,非文件夹图标的叫做“值名称”,但是习惯上称为“键”,数据叫做“值”。

说明信息中的:
┃    │    │**16  配合@#数据为16进制。**0配合!清空该值;配合=为建立空                               ┃

建议改为:
┃    │    │**16  配合@#数据为16进制。**0配合!清空该项下的键(不清除默认值);配合=为建立空                               ┃
回复

使用道具 举报

5405#
 楼主| 发表于 2013-4-12 18:14:21 | 只看该作者
2010qaqz111 发表于 2013-4-12 17:55
谢谢!16进制方便很多了!

REGI **16 HKLM\SYSTEM\123\912=@ 12 31 20
  1. <FONT face=宋体>REGI **16 HKLM\SYSTEM\123\912=@ 12 31 20
  2.                               \ 55 56 77
  3.                               \ 78 99 99
  4. 这种写法生成的键值仍然还有问题,红颜色的两个字节掉了。</FONT>
复制代码
\ 后面至少2个空格,一个是排版空格, 一个数据间空格。
REGI **16 HKLM\SYSTEM\123\912=@ 12 31 20
                             \        55 56 77
                             \        78 99 99



回复

使用道具 举报

5406#
发表于 2013-4-12 19:02:06 | 只看该作者
2个空格正常了,看来是换行直接被忽略掉了,这回没有问题了,谢谢!
回复

使用道具 举报

5407#
发表于 2013-4-12 19:14:01 | 只看该作者
mdyblog, you can pack PECMD2012 with .RAR or .7z.
I use Windows ENG UnPack Zip is Error FONT (Windows CHINESE UnPack, use WINRAR PACK is OK)
回复

使用道具 举报

5408#
 楼主| 发表于 2013-4-12 19:19:35 | 只看该作者
本帖最后由 mdyblog 于 2013-4-12 19:46 编辑
2010qaqz111 发表于 2013-4-12 17:55
谢谢!16进制方便很多了!

REGI **16 HKLM\SYSTEM\123\912=@ 12 31 20


**0 你需要什么言的功能?
目前 **0!:
  删除其下面的 子项和值。不清除  自己的默认数据。

而REG  delete /va  值删除 其下的值,并清除  自己的默认数据; 但 不删除其下的子项。

干脆全都删除:值, 子项, 默认值
回复

使用道具 举报

5409#
发表于 2013-4-12 19:22:03 | 只看该作者
磁盘扇区的十六进制也改成这样0x55AAFFDD这样的吧。原来的那个太费眼,也不好写。
回复

使用道具 举报

5410#
 楼主| 发表于 2013-4-12 19:42:41 | 只看该作者
本帖最后由 mdyblog 于 2013-4-12 19:43 编辑
2011Tduy09 发表于 2013-4-12 19:14
mdyblog, you can pack PECMD2012 with .RAR or .7z.
I use Windows ENG UnPack Zip is Error FONT (Windo ...


后缀改为RAR, 用WINRAR 解开即可。
不改后缀,先运行WINRAR, 再打开 该文件包。 也可。
回复

使用道具 举报

5411#
 楼主| 发表于 2013-4-12 19:47:15 | 只看该作者
freesoft00 发表于 2013-4-12 19:22
磁盘扇区的十六进制也改成这样0x55AAFFDD这样的吧。原来的那个太费眼,也不好写。

????说什么啊? 没没明白。
回复

使用道具 举报

5412#
发表于 2013-4-12 20:28:23 | 只看该作者
2010qaqz111 发表于 2013-4-12 07:45
REGI 命令的一些问题:

这样写也是可以的REGI HKLM\SYSTEM\123\A1=@ 0x99 0x12 0x74 0x33 0x99 0x13 0x62 0x74 0x99 0x14 0x34 0x94 0x99 0x15 0x52 0x37
回复

使用道具 举报

5413#
发表于 2013-4-12 20:32:52 | 只看该作者
真不明白你们为什么把十六进制注册表的手写写得那么复杂
回复

使用道具 举报

5414#
 楼主| 发表于 2013-4-12 20:38:48 | 只看该作者
2011hwo1 发表于 2013-4-12 20:28
这样写也是可以的REGI HKLM\SYSTEM\123\A1=@ 0x99 0x12 0x74 0x33 0x99 0x13 0x62 0x74 0x99 0x14 0x34 0 ...

可以的。 原有的写法都支持。
回复

使用道具 举报

5415#
 楼主| 发表于 2013-4-12 20:39:31 | 只看该作者
2011hwo1 发表于 2013-4-12 20:32
真不明白你们为什么把十六进制注册表的手写写得那么复杂

呵呵。 是啊! 我也纳闷。
回复

使用道具 举报

5416#
发表于 2013-4-12 20:40:03 | 只看该作者
十六进制注册表的数据一般不会手写吧,都是reg转来的,只是以前要加0x前缀经常整得很多编辑器一行都显示不完要强制换行。
回复

使用道具 举报

5417#
发表于 2013-4-12 20:43:57 | 只看该作者
本帖最后由 2010qaqz111 于 2013-4-12 21:06 编辑
mdyblog 发表于 2013-4-12 19:19
**0 你需要什么言的功能?
目前 **0!:
  删除其下面的 子项和值。不清除  自己的默认数据。


要不加个掩码开关吧:
REGI **0:dev XXXX\XXXX\!

d表示默认值(default)
e表示项(entry)
v表示值键(value key)

有哪个删哪个,缺省跟 reg delete /va 一致,或者缺省三种全清除。掩码不一定用dev,用123或者特殊的字符也行。
回复

使用道具 举报

5418#
 楼主| 发表于 2013-4-12 21:19:04 | 只看该作者
本帖最后由 mdyblog 于 2013-4-12 21:22 编辑
2010qaqz111 发表于 2013-4-12 20:43
要不加个掩码开关吧:
REGI **0:dev XXXX\XXXX\!


已改。
可以分成子项**0:数字N, 1清默认值 2删所有值 4删所有子项。可以多个**0:N,数字可合并(如5)。

**0:1   清默认值
**0:2   删所有值
**0:4   删所有子项
**0      删除所有  ( **0:7也是)

可以 regi   **0:1   **0:4   ...
可以 regi   **0:5     ...
回复

使用道具 举报

5419#
发表于 2013-4-12 22:39:56 | 只看该作者
本帖最后由 2010qaqz111 于 2013-4-12 22:50 编辑

LOGS 输出是命令运行完之后才输出到日志的吧,没有文件名行号函数名辅助定位看起来实在太吃力了,尤其是嵌套的CALL和FIND IFEX的调用,看到好多行之后才发现进了 IFEX FIND 的某个分支或者进了某个 CALL 或者 LOAD,又返回去看分支条件。。。
多线程CALL的脚本不知道哪里有问题,时行时不行,想看LOG找问题在哪,可看起来太吃力了,能否考虑把LOG输出加上文件名、行号、当前函数名来做辅助定位?

另外 PECMD 在解释脚本的时候应该还维护有一个变量层级的状态量,进入一个{}或者CALL一个函数或者LOAD一个文件都会有相应变化,而且这个状态量应该是和变量生存期有关,这个状态量能否也输出到LOG?用来判断是否进入代码块和变量有效范围。
回复

使用道具 举报

5420#
发表于 2013-4-12 22:43:41 | 只看该作者
mdyblog 发表于 2013-4-12 21:19
已改。
可以分成子项**0:数字N, 1清默认值 2删所有值 4删所有子项。可以多个**0:N,数字可合并(如5)。 ...

这样就比 reg delete 强了,也更灵活了。
回复

使用道具 举报

5421#
 楼主| 发表于 2013-4-12 23:08:16 | 只看该作者
本帖最后由 mdyblog 于 2013-4-12 23:32 编辑
2010qaqz111 发表于 2013-4-12 22:39
LOGS 输出是命令运行完之后才输出到日志的吧,没有文件名行号函数名辅助定位看起来实在太吃力了,尤其是嵌套 ...


要输出命令结果,只能等到执行完毕再打印LOG。
适可而止吧。毕竟 LOGS不是关键。别花太多的精力。
要做完善,得单独做一个debuger。

要行号文件名 函数名 ,可以
插入 SET &=DEBUG 行号 文件名 函数名   信息 。。。

SET &=DEBUG  10  信息 1
.。。。
SET &=DEBUG  20  信息 2
.。。。
SET &=DEBUG  26  信息 3


多线程LOGS。可以写个脚本,根据线程号坼成一个一个的小LOG

》》还维护有一个变量层级的状态量
不用。 C++些的,不用, C++代劳了。
回复

使用道具 举报

5422#
发表于 2013-4-12 23:18:48 | 只看该作者
mdyblog 发表于 2013-4-12 23:08
要输出命令结果,只能等到执行完毕再打印LOG。
适可而止吧。毕竟 LOGS不是关键。别花太多的精力。
要做 ...

好的,我另外想办法查错吧。扯到多线的东西就是恼火,调试查错太麻烦了。
回复

使用道具 举报

5423#
发表于 2013-4-12 23:38:51 | 只看该作者
本帖最后由 2010qaqz111 于 2013-4-12 23:40 编辑
mdyblog 发表于 2013-4-12 23:08
SET &=DEBUG  10  信息 1
.。。。
SET &=DEBUG  20  信息 2
.。。。
SET &=DEBUG  26  信息 3

哦,这是手动插入信息到LOG,这个可以有,试试。


拆线程脚本倒是不用那么麻烦,因为有线程号,用 excel 的筛选就可以析出某个特定线程的 LOG 了,配合手动插入信息应该会好点。
回复

使用道具 举报

5424#
 楼主| 发表于 2013-4-12 23:40:10 | 只看该作者
本帖最后由 mdyblog 于 2013-4-12 23:41 编辑
2010qaqz111 发表于 2013-4-12 23:18
好的,我另外想办法查错吧。扯到多线的东西就是恼火,调试查错太麻烦了。


多线程调试想来是件麻烦事。 多线程程序保证正确也是麻烦事。 C、C++也是如此。
多线程 少出错的一法是:多用SENDMSG。
子线程 只用(读或写)自己专属的变量。
凡是 涉及共享的变量, 都SENDMSG到主线程, 数据交互都集中在 主线程。 这样利用消息队列自己的固有的同步机制, 会少出很多错误。
这样不用单独考虑线程同步。


SET-swap  效率很高。 不管多大的变量, 瞬间完成交换。
回复

使用道具 举报

5425#
发表于 2013-4-12 23:45:16 | 只看该作者
本帖最后由 2010qaqz111 于 2013-4-12 23:47 编辑
mdyblog 发表于 2013-4-12 23:40
多线程调试想来是件麻烦事。 多线程程序保证正确也是麻烦事。 C、C++也是如此。
多线程 少出错的一法是: ...


目前遇到的多线引起的不确定发生错误都不是共享变量引起的,因为我只是用多线开独立的任务,有等待我都是用文件系统建立空文件同步这种方式来做的,间隔等待查询的尺度也很大(WAIT 500),这种方式在运行完之后会在磁盘上留下痕迹,可以做一些辅助的判断。

现在遇到的两个疑似的问题是,主线早已设置到的PE变量,在子线程有时候会解释成空串;另一个就是 THREAD* 开出的线程根本就不起来。
回复

使用道具 举报

5426#
 楼主| 发表于 2013-4-12 23:49:13 | 只看该作者
2010qaqz111 发表于 2013-4-12 23:38
哦,这是手动插入信息到LOG,这个可以有,试试。

可以写一个脚本, 在WCS脚本中自动加入
SET &=AUTO_DEBUG  行号  文件名
这样LOGS中就有行号信息了。
完毕, 再自动去掉这些行。
回复

使用道具 举报

5427#
发表于 2013-4-12 23:54:44 | 只看该作者
mdyblog 发表于 2013-4-12 23:49
可以写一个脚本, 在WCS脚本中自动加入
SET &=AUTO_DEBUG  行号  文件名
这样LOGS中就有行号信息了。  ...

隔行插一条?算了还是手动吧,在关键的地方放一些就是了,自动的遇到带{}拆行的 FIND IFEX 和 \ 并行的语句貌似会出问题。
回复

使用道具 举报

5428#
 楼主| 发表于 2013-4-12 23:57:35 | 只看该作者
本帖最后由 mdyblog 于 2013-4-13 00:02 编辑
2010qaqz111 发表于 2013-4-12 23:45
目前遇到的多线引起的不确定发生错误都不是共享变量引起的,因为我只是用多线开独立的任务,有等待我都 ...


》》主线早已设置到的PE变量,在子线程有时候会解释成空串;
是不是 主线程回头又 重写了改变量,所以为空了。
PECMD2012 是C++严格封装的,(自己)不用什么全局变量。 一般不会出这种问题的。


》》另一个就是 THREAD* 开出的线程根本就不起来
这个不知道。 只有找到一个实例, 我才能看看怎么回事。


可以考虑LOGS 加**2开关, 这样LOGS打2次。 一次是执行前,用<命令>表示。 一次是现在的 [命令]错误码。
回复

使用道具 举报

5429#
发表于 2013-4-13 00:07:41 | 只看该作者
mdyblog 发表于 2013-4-12 23:57
》》主线早已设置到的PE变量,在子线程有时候会解释成空串;
是不是 主线程回头又 重写了改变量,所以 ...

应该可以确定不是重复写了主线的变量,因为那个变量是用来保存 ud 区的硬盘号的,在一个进程中只会初始化一次,之后只是读,不会写,所以觉得很奇怪。

THREAD* 的线程不起来很大可能是新线程启动输出的LOG隔得太远,不在 THREAD* 的附近,所以不好判断。只有看再遇到这问题仔细查一下日志了。
回复

使用道具 举报

5430#
 楼主| 发表于 2013-4-13 00:12:33 | 只看该作者
2010qaqz111 发表于 2013-4-13 00:07
应该可以确定不是重复写了主线的变量,因为那个变量是用来保存 ud 区的硬盘号的,在一个进程中只会初始化 ...

>>应该可以确定不是重复写了主线的变量,因为那个变量是用来保存 ud 区的硬盘号的,在一个进程中只会初始化一次,之后只是读,不会写,所以觉得很奇怪。
那只有 缩短点, 30行以内,且可以重复出现;传上了 试试。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-9-27 22:20

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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