当我在Delphi中编写独立的可执行文件时,我可以执行以下操作从内存中读取文本:
var
First: array [0..MAX_PATH] of AnsiChar;
Read: NativeUint;
begin
Win32Check(ReadProcessMemory(hProc, pointer(Base + AddrF), @First, SizeOf(First), Read));
显示内存中的文本没有任何问题。但是,当我作为DLL进入进程时,我使用以下代码:
var
Value: NativeUint;
begin
Value := PNativeUint(Base + AddrF)^;
ShowMessage(IntToStr(Value)));
哪个好,但它会告诉我这个地址的正确值(4个字节的值),但是我想把它看作文本。
如果我使用:
ShowMessage(AnsiChar(Value)));
它只会在该内存地址显示文本的第一个字母。
问题:如何显示全文?
答案 0 :(得分:2)
正如MBo在评论中所说,您可以将地址输入PAnsiChar
而不是PNativeUInt
。另外,删除解除引用^
运算符:
var
Value: PAnsiChar;
begin
Value := PAnsiChar(Base + AddrF);
ShowMessage(Value);
可替换地:
var
Value: AnsiString;
begin
SetString(Value, PAnsiChar(Base + AddrF), MAX_PATH);
ShowMessage(Trim(Value));
答案 1 :(得分:1)
例如
var
First: array [0..MAX_PATH] of AnsiChar;
begin
Move(Pointer(Base + AddrF)^, First, SizeOf(First));