如何使用ReadProcessMemory读取pchar

时间:2012-05-25 23:22:40

标签: delphi delphi-xe2

我正在使用ReadProcessMemory函数来读取外部正在运行的应用程序的内容,我有一个指向PChar(UNICODE)的内存地址。我想知道哪个是将该值恢复为字符串变量的正确方法?

现在我正在使用此代码,但无效

var
c : char;

repeat
  if not ReadProcessMemory(ph, Address, @c, sizeof(c), BytesRead) then
    raise exception.create(syserrormessage(getlasterror));
  result:=result+c;
  Address:=pointer(integer(address)+sizeof(c));
until (c=#0#0) or (BytesRead<>sizeof(c));

引发此错误

  

只有ReadProcessMemory或WriteProcessMemory请求的一部分   完成

1 个答案:

答案 0 :(得分:4)

您正在读取字符串:您不是读取字节而是字符,因此将空终止符与char进行比较,即:

until (c=#0) or (BytesRead<>sizeof(c));

#0已经是2个字节,#0#0是4个字节(它不能等于任何 Char)。

当您读取字符串并将“读入进程中无法访问的区域”时(根据documentation),将返回错误。