标题: vb问题(3)
性别:未知-离线 Maxwell

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

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


发表于 2008-6-10 18:09 资料 文集 短消息 看全部作者
机器上没有VB,晚上回去没有网络,明天再看。。。


顶部
性别:未知-离线 Maxwell

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

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


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


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

顶部
性别:未知-离线 Maxwell

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

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


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


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

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

移位移不动是不是因为是const类型的?
顶部
性别:未知-离线 Maxwell

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

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


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


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


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

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

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

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


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

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

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


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

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

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


发表于 2008-6-20 16:39 资料 文集 短消息 看全部作者
晕,到底是写不进去还是读不出来?哪个文件的哪个函数哪一行有问题,这样说明一下是不是更利于找问题?
顶部
性别:未知-离线 Maxwell

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

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


发表于 2008-6-20 17:04 资料 文集 短消息 看全部作者
知道了,周末有事,下周来看看。
顶部
性别:未知-离线 Maxwell

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

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


发表于 2008-6-24 10:52 资料 文集 短消息 看全部作者
想必楼主找到了一个可以写入的地址,不过我没有找到,我选择内存读写器,随机设置了几个地址写入都不成功。
顶部
性别:未知-离线 Maxwell

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

Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27Rank: 27
柱国(正二品)
组别 诸侯
级别 征东将军
好贴 4
功绩 1845
帖子 5800
编号 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

你说写已经没问题那我就不测了,我怕写进去我的程序崩掉,参考这个代码相信也能用一行解决问题。
顶部
性别:未知-离线 Maxwell

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

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


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

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

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


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

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

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


发表于 2008-6-24 17:59 资料 文集 短消息 看全部作者
金山游侠读出来是0怎么知道是写进去了?我觉得用string有它天然的缺陷,内部是BSTR,当byte用很难说会出什么问题。
顶部
性别:未知-离线 Maxwell

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

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


发表于 2008-6-24 18:12 资料 文集 短消息 看全部作者
你是说写进去之后在被写的程序里数值变了,而金山游侠读出来的也是0?那是不是因为程序又重新刷回了0,找个别的程序写写试试。
顶部
性别:未知-离线 Maxwell

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

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


发表于 2008-6-24 20:00 资料 文集 短消息 看全部作者
那你读一段现有非0数据,看看有没有落在这个范围内的,根据推测,问题不在代码上。
顶部
性别:未知-离线 Maxwell

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

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


发表于 2008-6-24 21:59 资料 文集 短消息 看全部作者
既然试过没有问题那就不是读取代码的问题了,读取代码从机制上没有特殊处理过。建议找个记事本读读数据试试,游戏里面的不确定性比较多。
顶部
性别:未知-离线 Maxwell

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

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


发表于 2008-6-25 08:30 资料 文集 短消息 看全部作者
我的意思是从记事本里读连续100个位置,看看有没有在129-254之间的数字。或者读内存读写器试试,0x00400001-0x00400010之间有几个数。
顶部
性别:未知-离线 Maxwell

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

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


发表于 2008-6-25 11:54 资料 文集 短消息 看全部作者
我测试了前3个红字的值,都与你提供的金山游侠的值相同。
我的系统win2003serversp2 vb6sp6,使用下面的读取代码
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
顶部

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




当前时区 GMT+8, 现在时间是 2025-2-10 12:14
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

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

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