开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1722|回复: 4
收起左侧

[已回应] 类_内存 读文本BUG

[复制链接]
结帖率:100% (1/1)
发表于 2013-2-17 16:42:26 | 显示全部楼层 |阅读模式   河北省石家庄市
模块版本:3.31
所用系统:XP
命令名称:
BUG描述:读文本 字节集到文本的转换错误
我的联系QQ:451945384


原代码如下:
.版本 2

.子程序 读文本, 文本型, 公开, 读取文本型数据(返回文本 失败返回空文本)
.参数 进程ID, 整数型
.参数 内存地址, 整数型
.参数 长度, 整数型, 可空, 默认为20 欲读取的长度字节
.局部变量 临时字节集, 字节集
.局部变量 操作句柄, 整数型

.如果真 (长度 = 0)
    长度 = 20
.如果真结束
' --读文本---------------------------------
临时字节集 = 取空白字节集 (长度)
操作句柄 = OpenProcess (#PROCESS_ALL_ACCESS, 0, 进程ID)  ' 取得操作句柄
ReadProcessMemory_字节集 (操作句柄, 内存地址, 临时字节集, 长度, 长度)
CloseHandle (操作句柄)
返回 (到文本 (临时字节集))



\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

测试的时候和勇芳-内存数据分析编辑器的结果对比,每次都返回不正确。后看了看,感觉简单的由字节集到文本的转换不太正确。稍稍做一点修改

.版本 2

.子程序 读文本, 文本型, 公开, 读取文本型数据(返回文本 失败返回空文本)
.参数 进程ID, 整数型
.参数 内存地址, 整数型
.参数 长度, 整数型, 可空, 默认为20 欲读取的长度字节
.局部变量 临时字节集, 字节集
.局部变量 操作句柄, 整数型
.局部变量 内容文本, 文本型
.局部变量 p, 整数型

.如果真 (长度 = 0)
    长度 = 20
.如果真结束
' --读文本---------------------------------
临时字节集 = 取空白字节集 (长度)
操作句柄 = OpenProcess (16, 0, 进程ID)  ' 取得操作句柄
ReadProcessMemory_字节集 (操作句柄, 内存地址, 临时字节集, 长度, 长度)
内容文本 = “”
.计次循环首 (取字节集长度 (临时字节集), p)
    .如果 (临时字节集 [p] < 16)
        ' 内容文本 = 内容文本 + “.”
    .否则
        内容文本 = 内容文本 + 字符 (临时字节集 [p])
    .如果结束

.计次循环尾 ()

CloseHandle (操作句柄)
返回 (内容文本)
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

重新测试OK.目标程序为QQ

此类下的多个命令有此BUG,希望大神改改吧。






结帖率:100% (1/1)
 楼主| 发表于 2013-2-17 19:58:05 | 显示全部楼层   河北省石家庄市
本帖最后由 gotomiss 于 2013-2-17 20:41 编辑

测试代码:

.版本 2

.程序集 窗口程序集1
.程序集变量 内存类, 类_内存

.子程序 _按钮1_被单击

编辑框2.内容 = 读文本 (到数值 (编辑框1.内容), 65536, 1024)


.子程序 _按钮2_被单击

编辑框2.内容 = 内存类.读文本 (到数值 (编辑框1.内容), 65536, 1024)


.子程序 读文本, 文本型, 公开, 读取文本型数据(返回文本 失败返回空文本)
.参数 进程ID, 整数型
.参数 内存地址, 整数型
.参数 长度, 整数型, 可空, 默认为20 欲读取的长度字节
.局部变量 临时字节集, 字节集
.局部变量 操作句柄, 整数型
.局部变量 内容文本, 文本型
.局部变量 p, 整数型

.如果真 (长度 = 0)
    长度 = 20
.如果真结束
' --读文本---------------------------------
临时字节集 = 取空白字节集 (长度)
操作句柄 = OpenProcess (16, 0, 进程ID)  ' 取得操作句柄
ReadProcessMemory_字节集 (操作句柄, 内存地址, 临时字节集, 长度, 长度)
内容文本 = “”
.计次循环首 (取字节集长度 (临时字节集), p)
    .如果 (临时字节集 [p] < 16)
        ' 内容文本 = 内容文本 + “.”
    .否则

        .' 如果真 (临时字节集 [p] = 0)
            ' 跳出循环 ()
        .如果真结束
        内容文本 = 内容文本 + 字符 (临时字节集 [p])
    .如果结束

.计次循环尾 ()

CloseHandle (操作句柄)
返回 (内容文本)
‘、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、


从65536处搜索,也就是16进制10000,引处数据:
31 00 38 00 33 00 30 00 42 00 37 00 42 00 44 00 2D 00 46 00 37 00 41 00 33 00 2D 00 34 00 63 00 34 00 64 00 2D 00 39 00 38 00 39 00 42 00 2D 00 43 00 30 00 30 00 34 00 44 00 45 00 34 00 36 00 35 00 45 00 44 00 45 00 3D 00 64 00 35 00 63 00 3A 00 31 00 37 00 65 00 31 00 35 00 38 00 00 00 41 00 4C 00 4C 00 55 00 53 00 45 00 52 00 53 00 50 00 52 00 4F 00 46 00 49 00 4C 00 45 00 3D 00 43 00 3A 00 5C 00 44 00 6F 00 63 00 75 00 6D 00 65 00 6E 00 74 00 73 00 20 00 61 00 6E 00 64 00 20 00 53 00 65 00 74 00 74 00 69 00 6E 00 67 00 73 00 5C 00 41 00 6C 00 6C 00 20 00 55 00 73 00 65 00 72 00 73 00 00 00 41 00 50 00 50 00 44 00 41 00 54 00 41 00 3D 00 43 00 3A 00 5C 00 44 00 6F 00 63 00 75 00 6D 00 65 00 6E 00 74 00 73 00 20 00 61 00 6E 00 64 00 20 00 53 00 65 00 74 00
对应TEXT:
1.8.3.0.B.7.B.D.
-.F.7.A.3.-.4.c.
4.d.-.9.8.9.B.-.
C.0.0.4.D.E.4.6.
5.E.D.E.=.d.5.c.
:.1.7.e.1.5.8...
A.L.L.U.S.E.R.S.
P.R.O.F.I.L.E.=.
C.:.\.D.o.c.u.m.
e.n.t.s. .a.n.d.
.S.e.t.t.i.n.g.
s.\.A.l.l. .U.s.
e.r.s...A.P.P.D.
A.T.A.=.C.:.\.D.
o.c.u.m.e.n.t.s.
.a.n.d. .S.e.t.

当单击按钮2时,内容 只有 1
单击按钮1时,内容:1830B7BD-F7A3-4c4d-989B-C004DE465EDE=d5c:17e158ALLUSERSPROFILE=C:\Documents and Settings\All UsersAPPDATA=C:\Documents and Settings\Administrator\Application DataCLIENTNAME=ConsoleCommonProgramFil

看数据可知道,可能是 到文本()这个函数,会单字节读取,1之后就是00,它就判断文本结束。

其实不算是精易的BUG,只能说  到文本() 不太完善。。。
这个小小的错误可能影响到 类_内存 这个类下的多个函数,看了看,有几个是用到文本() 这个函数来转换的。
我也很菜,大神指教了。。。
回复 支持 反对

使用道具 举报

结帖率:60% (3/5)
发表于 2013-2-17 17:19:19 | 显示全部楼层   上海市上海市
有没有测试代码???
回复 支持 反对

使用道具 举报

结帖率:100% (16/16)
发表于 2013-2-17 16:47:53 | 显示全部楼层   四川省成都市
地砖。路过           应该是电脑问题
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
 楼主| 发表于 2013-2-17 16:43:33 | 显示全部楼层   河北省石家庄市
本帖最后由 gotomiss 于 2013-2-17 20:59 编辑

有的程序测试没问题,有的有问题,是因为变量的类型不同的原因吧。
我测试的是QQ
内存中是双字节的文本,到文本()只能转换单字节依次转换(自己推测,有待论证)

类_内存.搜索()里面差不多也是单字节的,所以用这个也搜不出想要的结果----这个只是简单测试了下。
程序中调用 内存类.搜索(2430,到字节集(“451945384”))

比如说我搜索我的QQ号:451945384

1817A0处有内容如下:
00 00 00 00 00 00 00 00 01 00 00 00 34 00 35 00 31 00 39 00 34 00 35 00 33 00 38 00 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

对应TEXT:
............4.5.1.9.4.5.3.8.4....................

这回是到字节集()出的错误,看一看它转换的是什么,调用
输出调试文本 (字节集_查看 (到字节集 (“451945384”)))
结果:
{52,53,49,57,52,53,51,56,52}
是十进制的,也有可能是字节集_查看 ()进行了转换,不管怎样,长度比内存中的长度少了一半。
这样当然搜索不到。
如果是汉字呢。
输出调试文本 (字节集_查看 (到字节集 (“我爱你”)))
结果:十进制
{206,210,176,174,196,227}

这个好像也搜不到。


哈哈,把问题留给大神了。其实就是类型转换,有点麻烦啊。。。。


回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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