2015-12-26 21 views
0

当我的代码德尔福我独立的可执行文件,我可以执行以下向一个进程从内存中读取文本:如何读取德尔福从内存中的文本,并打印出来

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

角色地址PAnsiChar – MBo

+0

ANSIChar类型是一个8位的ANSI字符。 –

+0

强制转换为AnsiString? –

回答

1

例如

var 
    First: array [0..MAX_PATH] of AnsiChar; 
begin 
    Move(Pointer(Base + AddrF)^, First, SizeOf(First)); 
+0

谢谢,这正是我一直在寻找的。 – user3702997

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)); 
+0

问题中的固定长度数组是否表明数据不需要以空值终止? –

+0

“MAX_PATH”的使用意味着包含路径/文件名的缓冲区,该路径始终为空。 –