ReadDroiyanData($0439FE8, 2, j);   //这句怎么理解?事实上读取的值是对的.
   
 editsm.text := IntToStr(j);已经读出内存地址的值, 但我要把$0439FE8 偏移31该怎么写 ,地址是动态的,所以我用基址+偏移替代它 

解决方案 »

  1.   

    $0439FE8+31 结果是4431897$0439FE8+$31 结果是4431879
      

  2.   

    $31是十进制49,你要移动31还是49?ReadDroiyanData是自定义函数,你不贴函数原型叫人怎么知道是什么,顺便帮你贴一下,原来的函数有说明:
    //读入《决战》指定地址的N个字节的数据,成功返回读入的字节数,失败返回-1
    function ReadDroiyanData(Address: integer; N: integer; var Buf): integer;
    var
      ByteOfRead: DWORD;
    begin
      Result := -1;
      if ReadProcessMemory(drProcessHandle, Pointer(Address),
        @Buf, N, ByteOfRead) then
        Result := ByteOfRead;
    end;  //ReadDroiyanData
      

  3.   

    把从$0439FE8开始的两个字节内容读入到J中,J应该是Word吧
      

  4.   

    谢谢楼上的速度帮助!!!  
    =================================================
    把从$0439FE8开始的两个字节内容读入到J中,J应该是Word吧
    =================================================
    意思应该不是把开始的两个字节读入J中, 是以2字节的方式读取 这个地址 如果是4就是4字节读取ReadDroiyanData($0439FE8, 2, j); //$0439FE8是假设的,我用ce找出这个值
      editsm.text := IntToStr(j);  //editsm.text 输出的值就是游戏中的血值, 测试是正确的.但$0439FE8(是别人给我的基址)这个地址是变动的, 重开游戏就变了. 别人给了我基址是$0439FE8 ,告诉我偏移量是 31 .  实际地址就是基址+偏移量我需要得到的就是 实际地址就是基址+偏移量 的结果 !!! 这个结果应该是跟$0439FE8 这个格式一样.希望楼上兄弟帮我解决下,马上结贴!
      

  5.   

    $00439FE8是一个内存地址,ReadDroiyanData($0439FE8, 2, j);就是把$00439FE8和$00439FE9这两个内存地址中的内存读到J中;$00439FE8是十六进制表示方式,转换成十进制就是4431848,如果你要看4431848+31的十六进制表示,这样就可以了
    ShowMessage( IntToHex($00439FE8+31, 8) )