2

我正在使用该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 请求的一部分

4

1 回答 1

4

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

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

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

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

于 2012-05-26T00:54:36.637 回答