Delphi 用ReadProcessMemory怎么读出内存的英文字符啊?我怎么只能读出第一个字母。
看看哪里出错了procedure Gw_list;
var
  i,ecx,edx:integer;
  BufferS: Pointer;
  s:TListItem;
  iRead:Cardinal;
  xx:DWORD;
begin
  GetMem(BufferS,1024); //申请内存空间1024字节用来存放字符串
  i := 0;
  ReadProcessMemory(unit1.hProcess,Pointer($929174),Pointer(@xx),sizeof(xx),iRead);
  ReadProcessMemory(unit1.hProcess,Pointer(xx + $1c),Pointer(@xx),sizeof(xx),iRead);
  ReadProcessMemory(unit1.hProcess,Pointer(xx + $8),Pointer(@xx),sizeof(xx),iRead);
  ReadProcessMemory(unit1.hProcess,Pointer(xx + $24),Pointer(@xx),sizeof(xx),iRead);
  ReadProcessMemory(unit1.hProcess,Pointer(xx + $18),Pointer(@xx),sizeof(xx),iRead);
  while i<=768 do
  begin
    ReadProcessMemory(unit1.hProcess,Pointer(xx + i*4),Pointer(@ecx),sizeof(ecx),iRead);
    if ecx <> 0 then
    begin
      ReadProcessMemory(unit1.hProcess,Pointer(ecx + $4),Pointer(@edx),sizeof(edx),iRead);
      ReadProcessMemory(unit1.hProcess,Pointer(edx + $238),Pointer(@edx),sizeof(edx),iRead);
      ReadProcessMemory(unit1.hProcess,Pointer(edx),@BufferS,sizeof(BufferS),iRead);      s := unit1.Form1.ListView1.Items.Add;
      s.Caption := PChar(BufferS);
    end;
    i := i+1;
  end;
end;

解决方案 »

  1.   

    这么简单的问题弄那么复杂ReadProcessMemory(unit1.hProcess,Pointer(edx),@BufferS,sizeof(BufferS),iRead);
    这个是什么乱七八糟 sizeof(BufferS) ??这种怎么对
      

  2.   

     ReadProcessMemory(unit1.hProcess,Pointer(edx),@BufferS,sizeof(BufferS),iRead);
    首先,你要确定Pointer(edx)地址肯定是正确的,其次你要确定Pointer(edx)中肯定含有一英文字串
    如果你读到的结果是一个串中的第一个字母.最有可能的是你内存中的串是unicode的.那就试试:
    s.Caption := PWideChar(BufferS);