如何从Delphi中的内存中读取文本并将其打印出来

时间:2015-12-26 12:22:58

标签: delphi

当我在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)));

它只会在该内存地址显示文本的第一个字母。

问题:如何显示全文?

2 个答案:

答案 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));