无忧启动论坛

 找回密码
 注册
搜索

PECMD能解析INF或者INI吗?

查看数: 5248 | 评论数: 32 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-1-26 20:27

正文摘要:

本帖最后由 求道者 于 2023-1-26 20:33 编辑 不是脚本,是INI格式的配置文件。 把INI的键值读取到变量里用来判断。

回复

jony 发表于 2024-6-10 10:40:07

那GetPrivateProfileSectionW这个函数如何用PECMD调用呢
wang1126 发表于 2024-3-6 10:44:37
学习学习
yyz2191958 发表于 2023-12-9 07:48:31
进来学习
nowayer 发表于 2023-12-8 21:01:37
提示: 作者被禁止或删除 内容自动屏蔽
求道者 发表于 2023-2-4 15:23:07

我看这个函数要操作指针就没搞了。
红毛樱木 发表于 2023-2-4 11:52:47
本帖最后由 红毛樱木 于 2023-2-4 12:01 编辑
  1. ENVI^ EnviMode=1
  2. ENVI &MAX_LENGTH=512    //一般长度不会超过512吧,可以自己设置。
  3. SET$# &plpReturnedStrings=*%&MAX_LENGTH% 0
  4. CALL $--qd --bool --ret:&&GetPrivateProfileStringWRet Kernel32.dll,GetPrivateProfileStringW,$database,$server,$GetPrivateProfileStringWRet_Failed_PECMD2012,*&&plpReturnedStrings,#%&MAX_LENGTH%,$%&CurDir%\A.ini
  5. SET-make &lpReturnedStrings=&&plpReturnedStrings;(%&&GetPrivateProfileStringWRet%*2)
  6. MESS. %&&lpReturnedStrings%@%&&GetPrivateProfileStringWRet%
复制代码

点评

我看这个函数要操作指针就没搞了。  详情 回复 发表于 2023-2-4 15:23
红毛樱木 发表于 2023-2-4 01:50:01
本帖最后由 红毛樱木 于 2023-2-4 01:51 编辑
求道者 发表于 2023-2-3 22:45
查询的内容也必须是整数吗?
查询中文返回4294967295
  1. CALL $--ret:&&ret --qd Kernel32.dll,GetPrivateProfileIntW,$程序,$外置工具模式,#0xFFFFFFFF,$%&CurDir%\FirPE.ini
  2. MESS %&&ret%
复制代码


--qd都有前导,#整数,<INT64,*PE变量名,$字符串,=原始串,>VARIANT。
---------------------------------------
PECMD内部使用的是UNICODE就是你说的UTF-16编码,所以用PECMD写代码时,尽量用这个编码。其它编码格式可能需要自己用CODE之类的转换---------------------------------------
我还是觉得用GetPrivateProfileStringW函数比较合适

红毛樱木 发表于 2023-2-3 23:37:01
求道者 发表于 2023-2-3 22:45
查询的内容也必须是整数吗?
查询中文返回4294967295

0xFFFFFFFF=4294967295
可以自己设置找不到后的返回数据。API说明里有。
UNICODE就是UNICODE,UTF-8就是UTF-8,它俩不同的呀

点评

UTF-8也是UNICODE,是其子集。 即使是在Win平台,Web世界更认可UTF-8,不存在UTF-8不是UNICODE。 况且Linux/Unix/Mac/移动平台,用UTF-8。 只有Windows因为历史原因钦定UTF16-little Endian为唯一指定UNICODE。 倒  详情 回复 发表于 2023-2-4 01:08
求道者 发表于 2023-2-3 22:45:19
本帖最后由 求道者 于 2023-2-3 23:08 编辑
红毛樱木 发表于 2023-2-3 21:45
CALL $--ret:&&ret --qd Kernel32.dll,GetPrivateProfileIntW,$database,$port,#0xFFFFFFFF,$%&CurDir%\t ...
  1. CALL $--ret:&&ret --qd Kernel32.dll,GetPrivateProfileIntW,程序,外置工具模式,#0xFFFFFFFF,F:\FirPE\FirPE.ini
  2. MESS %&&ret%
复制代码



查询的内容也必须是整数吗?
查询中文返回4294967295

文档里说的Unicode是UTF-8带BOM吧?
FirPE.7z (1.36 KB, 下载次数: 2)

点评

--qd都有前导,#整数,VARIANT。 --------------------------------------- PECMD内部使用的是UNICODE就是你说的UTF-16编码,所以用PECMD写代码时,尽量用这个编码。其它编码格式可能需要自己用CODE之类的转换  详情 回复 发表于 2023-2-4 01:50
0xFFFFFFFF=4294967295 可以自己设置找不到后的返回数据。API说明里有。 UNICODE就是UNICODE,UTF-8就是UTF-8,它俩不同的呀  详情 回复 发表于 2023-2-3 23:37
红毛樱木 发表于 2023-2-3 21:45:37
本帖最后由 红毛樱木 于 2023-2-3 21:56 编辑
求道者 发表于 2023-1-27 17:30
标准ini。
只能读取整个文本?
然后自己去搜索,过滤?

CALL $--ret:&&ret --qd Kernel32.dll,GetPrivateProfileIntW,$database,$port,#0xFFFFFFFF,$%&CurDir%\test.ini
这个你提供的API,好像只能整数。(UNICODE编码的INI)

点评

返回值还是不能直接打印吗?  详情 回复 发表于 2023-2-3 22:45
826773297 发表于 2023-2-2 09:08:46
adminkk 发表于 2023-1-28 12:23
解析?cmd还能解析么好强大

批处理是可以读,都是家常便饭了
求道者 发表于 2023-2-1 23:25:13
红毛樱木 发表于 2023-1-27 23:54
GetPrivateProfileStringW
https://learn.microsoft.com/zh-cn/windows/win32/api/winbase/nf-winbase-get ...

PECMD调用的示例有吗?
adminkk 发表于 2023-1-28 12:23:02
解析?cmd还能解析么好强大

点评

批处理是可以读,都是家常便饭了  详情 回复 发表于 2023-2-2 09:08
红毛樱木 发表于 2023-1-27 23:54:52
GetPrivateProfileStringW
https://learn.microsoft.com/zh-c ... ivateprofilestringw

现成的API,读整个文件不科学

点评

PECMD调用的示例有吗?  详情 回复 发表于 2023-2-1 23:25
szwp 发表于 2023-1-27 21:40:08
要读file还是port?
826773297 发表于 2023-1-27 20:07:30
dos时代菜鸟 发表于 2023-1-27 19:18
用 批处理就可以。pecmd 更不在话下。
逐行读取,赋值,字符串切割,判断,找到目标,再赋值显示出来。

...

楼主是问着玩的
dos时代菜鸟 发表于 2023-1-27 19:18:46
本帖最后由 dos时代菜鸟 于 2023-1-27 19:25 编辑

用 批处理就可以。pecmd 更不在话下。
逐行读取,赋值,字符串切割,判断,找到目标,再赋值显示出来。

脚本区 有现成的脚本。

点评

楼主是问着玩的  详情 回复 发表于 2023-1-27 20:07
求道者 发表于 2023-1-27 18:45:38
826773297 发表于 2023-1-27 18:38
比如获取ip部分直接正则就行



手动解析总感觉容易出问题。
算了。
826773297 发表于 2023-1-27 18:38:49
求道者 发表于 2023-1-27 17:30
标准ini。
只能读取整个文本?
然后自己去搜索,过滤?

比如获取ip部分直接正则就行


READ %desktop%\11111.txt,**,CurLine
SED -ni -ex a=?,server=.*? ,IP,CurLine
MESS %IP%

点评

手动解析总感觉容易出问题。 算了。  详情 回复 发表于 2023-1-27 18:45
求道者 发表于 2023-1-27 17:30:09
826773297 发表于 2023-1-27 17:15
你自己没提供示例,谁知道你要读哪个值
  1. ; last modified 1 April 2001 by John Doe
  2. [owner]
  3. name=John Doe
  4. organization=Acme Products

  5. [database]
  6. server=192.0.2.42 ; use IP address in case network name resolution is not working
  7. port=143
  8. file="acme payroll.dat"
复制代码

标准ini。
只能读取整个文本?
然后自己去搜索,过滤?

点评

CALL $--ret:&&ret --qd Kernel32.dll,GetPrivateProfileIntW,$database,$port,#0xFFFFFFFF,$%&CurDir%\test.ini 这个你提供的API,好像只能整数。  详情 回复 发表于 2023-2-3 21:45
比如获取ip部分直接正则就行 [attachimg]518651[/attachimg] READ %desktop%\11111.txt,**,CurLine SED -ni -ex a=?,server=.*? ,IP,CurLine MESS %IP%  详情 回复 发表于 2023-1-27 18:38
826773297 发表于 2023-1-27 17:15:29
你自己没提供示例,谁知道你要读哪个值

点评

标准ini。 只能读取整个文本? 然后自己去搜索,过滤?  详情 回复 发表于 2023-1-27 17:30
826773297 发表于 2023-1-27 17:14:41
读所有
826773297 发表于 2023-1-27 17:14:28

不是
iaanqrm 发表于 2023-1-27 17:00:15
求道者 发表于 2023-1-27 16:44:17
826773297 发表于 2023-1-27 15:09
一行命令就行,直接读

**是键名吗?

点评

不是  详情 回复 发表于 2023-1-27 17:14
826773297 发表于 2023-1-27 15:09:31
太简单,没什么技术含量
826773297 发表于 2023-1-27 15:09:04
求道者 发表于 2023-1-27 14:02
把ini的特定键值读取到变量里。

一行命令就行,直接读


READ C:\123.INI,**,CurLine

显示出来用MESS

MESS %CurLine%

点评

**是键名吗?  详情 回复 发表于 2023-1-27 16:44
求道者 发表于 2023-1-27 14:02:21
826773297 发表于 2023-1-27 09:58
ini和inf都能读,不用api,不知道你要读什么

把ini的特定键值读取到变量里。

点评

一行命令就行,直接读 READ C:\123.INI,**,CurLine 显示出来用MESS MESS %CurLine%  详情 回复 发表于 2023-1-27 15:09

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

闽公网安备 35020302032614号

GMT+8, 2024-11-28 13:20

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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