我正在使用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请求的一部分 完成
答案 0 :(得分:4)
您正在读取字符串:您不是读取字节而是字符,因此将空终止符与char进行比较,即:
until (c=#0) or (BytesRead<>sizeof(c));
#0
已经是2个字节,#0#0
是4个字节(它不能等于任何 Char)。
当您读取字符串并将“读入进程中无法访问的区域”时(根据documentation),将返回错误。