我以经知道一个内存址里面存了一个地址。如何把他读出来呢?
Call ReadProcessMemory(DRProcessHandle, &H726F34, TEMP, 1, 0&)
这样读出来在text里显示不出来任何东西。
asc(temp)后还是没有任何显示在text中。
如何能够把他读出来的东东显示出来呢。我知道读出来的东东是个内存的指像。如何能够操做他呢?
比如读出来的地址是 90 9c 6e 0f
要把他换为0f 6e 9c 90
然后写内存
WriteProcessMemory ProcessHandle, &H0f6e9c90, &H0, 1, 0&
这中间要用什么来过渡。

解决方案 »

  1.   

    怎么不试试用PowerBasic写个Dll来解决这个小菜问题?
    在PowerBasic 里也就是Peek一下、Pook一下就解决了的。
      

  2.   

    没用过powerbasic
    也还没写过dll.也不会调用dll.....
      

  3.   

    没试过,MSDN里有详细说明,应该不难。
      

  4.   

    好像要用VarPtr之类的指针函数
      

  5.   

    在内存中,不管你存储文本或者其他数据都是以字节为单位的二进制数据。因此,从内存中读出数据后,你应该需要自己根据换算成相应的数据类型,比如就文本而言:ASCII文本占用1个字节,而UNICODE则占用2个字节。关于地址转换的问题,其实就是二进制运算的问题。比如读出来的地址是“90 9c 6e 0f”,要把他换为“0f 6e 9c 90”,其实就是:Address=&H0f&2^32+&H6e*2^16+&H9c*2^8+&H90例子如下:
    Dim ReadBuffer(0 to 99) As Byte
    Dim WriteBuffer(0 to 99) As Byte'读内存
    CopyMemory Byval Varptr(ReadBuffer(0)),Byval &H726F34,100'写内存
    CopyMemory Byval &H726F34,Byval Varptr(WriteBuffer(0)),100
      

  6.   

    第1,地址是按值传递的,要BYARY 地址。
    第2,要等你再读不出的时候再说。
    但用数组读取的时候(还是字符串?!记不清了)必须把BUFFER也按值传递。
      

  7.   

    benyfeifei 思路我明白了。但是读不出来任何东西。
    用debug.print TEMP(0)和debug.print asc(temp(0))
    都看不到任何东西
    不知道这个问题会不会很菜哈。用Call ReadProcessMemory(DRProcessHandle, &H726F34, ByVal TEMP(0), 1, 0&)
    在debug.print asc(temp(0))还能看到值。
    但是好像超过127的值就看不到了。返回的是0
      

  8.   

    第四个参数要用VarPtr(Temp) ret = ReadProcessMemory(hProcess, ByVal lngAddress + 16, ByVal VarPtr(lngTextAdr), ByVal 4, ByVal 0&) from: http://community.csdn.net/Expert/topic/4182/4182435.xml?temp=.2501642