标题: vb问题(3)
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2008-6-10 15:52 资料 个人空间 短消息 只看该作者 QQ
vb问题(3)

请看下面一段程序:

(声明API函数部分省略。。。)
Private Sub Command1_Click()
Dim i As Byte , Data As Byte , MyStr As String*1
For i=0 To 255
Data=i
WriteProcessMemory MyProcess, Address, Data, 1, 0&
ReadProcessMemory MyProcess, Address, MyStr, 1, 0&
Data=Asc(MyStr)
Debug.Print Data
Next i
End Sub

问题是,程序运行后,显示如下结果:

QUOTE:
0
1
2
3
4
5
中间省略……
124
125
126
127
0
0
0
中间省略……
0
0
0

现在我希望0~255的数据都能从内存读出来,如下:

QUOTE:
1
2
3
4
5
中间省略……
251
252
253
254
255

问应该如何修改程序???


顶部
性别:男-离线 土狼

白衣伯爵
太常丞
★★

Rank: 11Rank: 11Rank: 11Rank: 11Rank: 11
组别 白衣卿相
级别 平南将军
功绩 299
帖子 2117
编号 199840
注册 2007-8-10


发表于 2008-6-10 16:20 资料 个人空间 短消息 只看该作者
不能肯定问题出在哪,感觉是读写过程中出了错

个人建议楼主不要用byte这种类型,大大方方的用integer,不在乎那点内存吧


顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2008-6-10 16:23 资料 个人空间 短消息 只看该作者 QQ
没用,这个是ASCII编码问题,用Integer就更不行了。
顶部
性别:未知-离线 司徒苍月
(kagami☆sama)

越国公
荆南节度使
枢密直学士

Rank: 22Rank: 22Rank: 22Rank: 22
柱国(正二品)
组别 节度使
级别 大将军
好贴 7
功绩 2823
帖子 28883
编号 52341
注册 2005-11-2
来自 创界山
家族 司徒实业


ASCII编码7+1位校验,所以只能是2的7次方
顶部
性别:未知-离线 Maxwell

代王
监管使
枢密直学士
山南西道节度使

Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27
柱国(正二品)
组别 诸侯
级别 征东将军
好贴 4
功绩 1845
帖子 5799
编号 622
注册 2004-7-7


发表于 2008-6-10 18:09 资料 文集 短消息 只看该作者
机器上没有VB,晚上回去没有网络,明天再看。。。
顶部
性别:未知-离线 Maxwell

代王
监管使
枢密直学士
山南西道节度使

Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27
柱国(正二品)
组别 诸侯
级别 征东将军
好贴 4
功绩 1845
帖子 5799
编号 622
注册 2004-7-7


发表于 2008-6-11 10:40 资料 文集 短消息 只看该作者
昨天没时间试,简单猜测一下吧。

Private Sub Command1_Click()
    Dim i As Byte , Data As Byte , MyStr As String*1

    For i=0 To 255
        Data=i
        WriteProcessMemory MyProcess, Address, Data, 1, 0&
        ReadProcessMemory MyProcess, Address, MyStr, 1, 0&
        Data=Asc(MyStr)
        Debug.Print Data
    Next i
End Sub

首先i不应该定义为byte类型,不然循环会溢出。
MyStr应该是个引用,所以把MyStr的地址传给ReadProcessMemory恐怕会有问题,不过你前127个倒是显示出来了,估计还是跟String内部实现机制有关,String内部可能是unicode存储的,对高于127的字符需要特别处理,这个仅是猜测,但是MSDN中对String的描述中有一条就是不要用于任何跟数值有关的地方。你用另外一个byte类型的变量传给ReadProcessMemory不行吗?
顶部
性别:未知-离线 Maxwell

代王
监管使
枢密直学士
山南西道节度使

Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27
柱国(正二品)
组别 诸侯
级别 征东将军
好贴 4
功绩 1845
帖子 5799
编号 622
注册 2004-7-7


发表于 2008-6-11 10:41 资料 文集 短消息 只看该作者


QUOTE:
原帖由 司徒苍月 于 2008-6-10 17:13 发表
ASCII编码7+1位校验,所以只能是2的7次方

顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2008-6-11 14:30 资料 个人空间 短消息 只看该作者 QQ
现在问题是怎么解决,我要搞一个内存修改器
顶部
性别:未知-离线 fantasydog
(codering)

Rank: 4
组别 士兵
级别 牙门将军
功绩 6
帖子 567
编号 42708
注册 2005-7-9


发表于 2008-6-11 14:48 资料 短消息 只看该作者
不了解VB。
不过Byte是unsigned char么?
Asc这个函数返回值又是啥?unsigned char?

有符号的东西其实蛮讨厌的,移位都移不动
顶部
性别:未知-离线 Maxwell

代王
监管使
枢密直学士
山南西道节度使

Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27
柱国(正二品)
组别 诸侯
级别 征东将军
好贴 4
功绩 1845
帖子 5799
编号 622
注册 2004-7-7


发表于 2008-6-11 14:58 资料 文集 短消息 只看该作者


QUOTE:
原帖由 阿尔法孝直 于 2008-6-11 14:30 发表
现在问题是怎么解决,我要搞一个内存修改器

你用另外一个byte类型的变量传给ReadProcessMemory不行吗?

二进制这事儿VB确实不太擅长,有这功夫都可以学学其他语言了,当然仅供参考,当前还是先解决问题为主。
顶部
性别:未知-离线 Maxwell

代王
监管使
枢密直学士
山南西道节度使

Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27
柱国(正二品)
组别 诸侯
级别 征东将军
好贴 4
功绩 1845
帖子 5799
编号 622
注册 2004-7-7


发表于 2008-6-11 14:59 资料 文集 短消息 只看该作者


QUOTE:
原帖由 fantasydog 于 2008-6-11 14:48 发表
不了解VB。
不过Byte是unsigned char么?
Asc这个函数返回值又是啥?unsigned char?

有符号的东西其实蛮讨厌的,移位都移不动

移位移不动是不是因为是const类型的?
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2008-6-11 15:34 资料 个人空间 短消息 只看该作者 QQ


QUOTE:
原帖由 Maxwell 于 2008-6-11 14:58 发表


你用另外一个byte类型的变量传给ReadProcessMemory不行吗?

二进制这事儿VB确实不太擅长,有这功夫都可以学学其他语言了,当然仅供参考,当前还是先解决问题为主。

不行,好早就试过,会出错。
顶部
性别:未知-离线 Maxwell

代王
监管使
枢密直学士
山南西道节度使

Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27
柱国(正二品)
组别 诸侯
级别 征东将军
好贴 4
功绩 1845
帖子 5799
编号 622
注册 2004-7-7


发表于 2008-6-11 16:14 资料 文集 短消息 只看该作者


QUOTE:
原帖由 阿尔法孝直 于 2008-6-11 15:34 发表


不行,好早就试过,会出错。

查了一下第3个参数是ByVal lpBuffer As Any,这是byte不行的原因,另外string是用BSTR实现的,所以对于大于127的值可能有特别处理。
你贴一个能运行的代码吧,现在想了几个方案,不知道哪个能用,回头我试试。
顶部
性别:未知-离线 龙王

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 39
编号 31773
注册 2005-2-2


发表于 2008-6-13 16:55 资料 短消息 只看该作者
这里要用字符串数组,byte变量不行的,用VC++吧,用1个char 数组,然后CString
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2008-6-13 18:22 资料 个人空间 短消息 只看该作者 QQ
Sorry,VC++我不熟。
顶部
性别:未知-离线 Maxwell

代王
监管使
枢密直学士
山南西道节度使

Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27
柱国(正二品)
组别 诸侯
级别 征东将军
好贴 4
功绩 1845
帖子 5799
编号 622
注册 2004-7-7


发表于 2008-6-14 01:29 资料 文集 短消息 只看该作者
我是说你先贴一段能运行但是结果不正确的代码,然后我好试试怎么能用,不要让我自己补全代码了。
顶部
性别:未知-离线 fantasydog
(codering)

Rank: 4
组别 士兵
级别 牙门将军
功绩 6
帖子 567
编号 42708
注册 2005-7-9


发表于 2008-6-17 13:57 资料 短消息 只看该作者
回复 #11 Maxwell 的帖子

不是,编译器直接报错。
就是不能移signed类型的,毕竟有个符号位在那里,处理起来相当麻烦。
我估计是编译器图省事,直接不准移位有符号数了。
再者,有符号数的移位通常意义也不大。乘除2的幂次的情况本来就少,也提高不了多少性能。
顶部
性别:未知-离线 Maxwell

代王
监管使
枢密直学士
山南西道节度使

Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27
柱国(正二品)
组别 诸侯
级别 征东将军
好贴 4
功绩 1845
帖子 5799
编号 622
注册 2004-7-7


发表于 2008-6-17 14:34 资料 文集 短消息 只看该作者
晕,什么语言?c#?从来没觉得c/c++中有不能移位的,就连浮点型真想移都能移了。到了机器码那一级,有没有符号位处理上都基本一样。
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2008-6-20 15:51 资料 个人空间 短消息 只看该作者 QQ
代码贴上来,大家看看。
顺便帮忙解决一下数据写不进内存的问题。

[ 本帖最后由 阿尔法孝直 于 2008-6-20 15:55 编辑 ]


附件: [简易内存读写器的代码] RWMemory.rar (2008-6-20 15:55, 2.86 K)
该附件被下载次数 117
顶部
性别:未知-离线 Maxwell

代王
监管使
枢密直学士
山南西道节度使

Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27
柱国(正二品)
组别 诸侯
级别 征东将军
好贴 4
功绩 1845
帖子 5799
编号 622
注册 2004-7-7


发表于 2008-6-20 16:39 资料 文集 短消息 只看该作者
晕,到底是写不进去还是读不出来?哪个文件的哪个函数哪一行有问题,这样说明一下是不是更利于找问题?
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2008-6-20 16:55 资料 个人空间 短消息 只看该作者 QQ
第一个问题:

写内存的程序段:
  Private Sub Command3_Click()
   WriteProcessMemory nHandle, nAddress, CLng(Text2.Text), nByte, 0&
  End Sub
就红色这句,改个数执行之后再按“读取”,又变成原来的数。


第二个问题:

读内存的程序段:
  Private Sub Command1_Click()
    On Error Resume Next
    Dim nStr As String * 1
    Dim Result As Long
    Dim i As Byte
    For
i = 0 To nByte - 1
     ReadProcessMemory nHandle, nAddress + i, nStr, 1, 0&
     Result = Result + Asc(nStr) * 256 ^ i
    Next i
    Text2.Text = Trim(Str(Result))
  End Sub
就红色的这两句,第一句执行时,凡是任何单字节在128~255之间的数据,读出来都是0,即
  Asc(nStr)=0
顶部
性别:未知-离线 Maxwell

代王
监管使
枢密直学士
山南西道节度使

Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27
柱国(正二品)
组别 诸侯
级别 征东将军
好贴 4
功绩 1845
帖子 5799
编号 622
注册 2004-7-7


发表于 2008-6-20 17:04 资料 文集 短消息 只看该作者
知道了,周末有事,下周来看看。
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2008-6-23 17:46 资料 个人空间 短消息 只看该作者 QQ
第一个问题自己改了代码后,解决了。


现在剩下第二个问题:

读内存的程序段:
  Private Sub Command1_Click()
    On Error Resume Next
    Dim nStr As String * 1
    Dim Result As Long
    Dim i As Byte
    For
i = 0 To nByte - 1
     ReadProcessMemory nHandle, nAddress + i, nStr, 1, 0&
     Result = Result + Asc(nStr) * 256 ^ i
    Next i
    Text2.Text = Trim(Str(Result))
  End Sub
就红色的这两句,第一句执行时,凡是任何单字节在128~255之间的数据,读出来都是0,即
  Asc(nStr)=0


附件: RWMemory.rar (2008-6-23 17:46, 2.98 K)
该附件被下载次数 101
顶部
性别:未知-离线 Maxwell

代王
监管使
枢密直学士
山南西道节度使

Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27
柱国(正二品)
组别 诸侯
级别 征东将军
好贴 4
功绩 1845
帖子 5799
编号 622
注册 2004-7-7


发表于 2008-6-24 10:52 资料 文集 短消息 只看该作者
想必楼主找到了一个可以写入的地址,不过我没有找到,我选择内存读写器,随机设置了几个地址写入都不成功。
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2008-6-24 11:20 资料 个人空间 短消息 只看该作者 QQ
随便打开一个游戏,比如曹操传,找到曹操的HP地址,看看行不行
顶部
性别:未知-离线 Maxwell

代王
监管使
枢密直学士
山南西道节度使

Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27
柱国(正二品)
组别 诸侯
级别 征东将军
好贴 4
功绩 1845
帖子 5799
编号 622
注册 2004-7-7


发表于 2008-6-24 14:28 资料 文集 短消息 只看该作者
好容易想了个办法测试了一下代码,有两种方法能够正确执行,有一种多少有点hack,说一下另一种吧,用下面的代码可以实现原来想要的功能,其实这里面还是利用了x86特性将byte, word, dword用一行代码处理了。VarPtr是一个内置函数,用于取变量的地址,相当于c/c++中的单目运算符&。
Private Sub Command1_Click()
    On Error Resume Next

    Dim data As Long

    ReadProcessMemory nHandle, nAddress, VarPtr(data), nByte, 0&

    Text2.Text = Trim$(Str$(data))
End Sub

你说写已经没问题那我就不测了,我怕写进去我的程序崩掉,参考这个代码相信也能用一行解决问题。
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2008-6-24 16:42 资料 个人空间 短消息 只看该作者 QQ
没用,还是一样。
不过前面的情况有错,应该是:

128~254还是0,
0~127或255正常读出。

[ 本帖最后由 阿尔法孝直 于 2008-6-24 16:51 编辑 ]
顶部
性别:未知-离线 Maxwell

代王
监管使
枢密直学士
山南西道节度使

Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27
柱国(正二品)
组别 诸侯
级别 征东将军
好贴 4
功绩 1845
帖子 5799
编号 622
注册 2004-7-7


发表于 2008-6-24 16:54 资料 文集 短消息 只看该作者
你在什么环境下测试的?如果255能读出来不可能128-254读不了
我测试的时候是读取自身进程的连续16个字节,其中有90,3,255,177,240。
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2008-6-24 17:18 资料 个人空间 短消息 只看该作者 QQ


QUOTE:
原帖由 Maxwell 于 2008-6-24 16:54 发表
你在什么环境下测试的?如果255能读出来不可能128-254读不了
我测试的时候是读取自身进程的连续16个字节,其中有90,3,255,177,240。

在XP SP2下用VB6按F5直接运行程序

我写一个字节再读出来

确实不行

不过情况又有变化:变成0~128或255能读,129~254不能读
顶部
性别:未知-离线 Maxwell

代王
监管使
枢密直学士
山南西道节度使

Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27
柱国(正二品)
组别 诸侯
级别 征东将军
好贴 4
功绩 1845
帖子 5799
编号 622
注册 2004-7-7


发表于 2008-6-24 17:24 资料 文集 短消息 只看该作者
你写的字节有没有写进去是个问题,所以我直接找一段地址挨着读,我后来试了一下,对于我测试的地址用你的代码写不进去。


顶部

正在浏览此帖的会员 - 共 5 人在线




当前时区 GMT+8, 现在时间是 2024-10-3 04:44
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.013671 second(s), 9 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP