如何将byte []数组转换为IntPtr?

时间:2012-02-29 14:39:50

标签: c# byte intptr readprocessmemory

  

可能重复:
  How to get IntPtr from byte[] in C#

我正在使用

从内存中读取字符串
byte[] array = 
reader.ReadProcessMemory((IntPtr)address, (uint)255, out bytesReadSize);

然后我将此数组转换为字符串。

我现在遇到一个问题,因为程序内存中的地址003A53D4有一个指向字符串的指针。我怎样才能得到字符串的地址?谢谢:))

我在做什么:

IntPtr pointers_address = new IntPtr(module_base_address + 3822548);
byte[] pointer_arrays = 
reader.ReadProcessMemory(pointers_address, (uint)16, out bytesReadSize2); 
IntPtr pointer_for_string = new IntPtr();
Marshal.Copy(pointers_array, 0, pointer_for_string, 16);

它说(大约第4行):

  

值不能为空。参数名称:destination

当我将新的IntPtr()更改为新 IntPtr(1)时 它说

  

尝试读取或写入受保护的内存。这通常是一个   表明其他内存已损坏。

2 个答案:

答案 0 :(得分:7)

最佳方式(IMO)如下:

GCHandle pinned = GCHandle.Alloc(array , GCHandleType.Pinned);
IntPtr address = pinned.AddrOfPinnedObject();
reader.ReadProcessMemory(address, (uint)255, out bytesReadSize);
pinned.Free();

答案 1 :(得分:2)

您可以使用Encoding.GetString()将字节转换为字符串。要使用哪种编码取决于字符串的编码,例如用于UTF8编码的Encoding.UTF8.GetString(pointer_arrays,0),用于unicode的Encoding.Unicode,用于ASCII的Encoding.ASCII或用于系统默认代码页的Encoding.Default。