比如我想读取程序名为yy.exe的程序里面的$11388A0  里面的数据.应该怎么写?
   ar  taskName:String;
     i:integer;
     TempHandle:Thandle;
     TempID,tempAddress:Dword;
     Ecode:integer;
     hp:pansichar;
     TempByte:Byte;begin
if ListView1.Selected<>nil then
  begin
  Val(ListView1.Selected.SubItems[0],TempID,Ecode);
  end;
  TempHandle:=OpenProcess(PROCESS_ALL_ACCESS,False,tempID);
  Val('$009522B8',tempAddress,Ecode);
  ReadMemory(CurrentProcessID,tempAddress,@tempByte,Byte_value);
   edit1.text:=inttostr(tempByte);我是先把进程和进程ID写进liseview1里面.然后来选择该进程.最后进行读取.我想读取的程序009522B8数值应该是55为什么edit显示的数字为0??

解决方案 »

  1.   

    类似的我贴一个出来.//读取某游戏的某个数据
    function TMyCanMusic.GetScore: integer;
    var
      Num: cardinal;
      PHND: THandle;
      PID, Score: Integer;
      D :DWord;
    begin
      Self.FXXCANH :=FindWindow(nil,'MyCanMusic Stand Alone by NDogXJ <Final Unicode ver>');
      if self.FXXCANH=0 then
      begin
        Result :=0;
        exit;
      end;
      GetWindowThreadProcessId(self.FXXCANH, @PID);
      PHND := OpenProcess(PROCESS_ALL_ACCESS,False,PID);
      if PHND <> 0 then
      ReadProcessMemory(PHND, Pointer($00455a00), @D, 4, Num);
      d :=d+$28;
      ReadProcessMemory(PHND, Pointer(d), @score, sizeof(score), Num);
      //1.0.0.5版本
      CloseHandle(PHND);
      result :=Score;
    end;
      

  2.   

    为零说明没有读到数据或就是为零BOOL ReadProcessMemory(
        HANDLE hProcess, // handle of the process whose memory is read  
        LPCVOID lpBaseAddress, // address to start reading
        LPVOID lpBuffer, // address of buffer to place read data
        DWORD nSize, // number of bytes to read
        LPDWORD lpNumberOfBytesRead  // address of number of bytes read
       );
    你要考虑到你要读的那个数据是什么类型的数据.我们计算机都是高端存放数据.如果是$000A在内存中可能是 000A/0A00数据.如果你读了为零位当然是零拉!~~
      

  3.   

       我自己写了个测试程序.里面有个变量a  我写了几个button.button1=A+2;  BUUTON2=A+4;
    我用CE找到了A的地址.009522B8'
    用CE就可以看到这个地址的数字在变化
    BUTOON1就可以看到
      

  4.   

    lz 在diy金山游侠?这个要学习下。
      

  5.   

    什么叫输入数值查找地址?如果给你一个数字.看你系统寻址地址如果是2G(FFFFFFFF)给你一个数,只要Integer64或Integer(数字)得到程序的内存起始地址+上你给定的地址就可以了!~取的都是堆中的相对地址.楼主的意思是不是取硬件单元上的地址?如果是的话可能需要操作系统配合下才可以!~
      

  6.   

       除了用timer就没有其它方法了吗?