【发布时间】:2015-09-05 04:26:57
【问题描述】:
我的 P/Invoke WriteProcessMemory 方法目前看起来像这样:
[DllImport("kernel32", SetLastError = true)]
[return : MarshalAs(UnmanagedType.Bool)]
static extern bool WriteProcessMemory(
IntPtr hProcess,
IntPtr baseAddress,
byte[] bufferToWrite,
uint numBytesToWrite,
out IntPtr numBytesWritten
);
我需要向bufferToWrite 参数发送一个字符串,但它需要一个byte[],所以我在传入之前将其转换为byte[]。
我的问题是,由于 .NET 字符串不是以 null 结尾的,因此它不会将终止的 null 写入远程内存。如果我在非托管代码中执行此操作,我将分配字符串的长度 + 终止 null,并将所有内容放入分配的内存中,因为我正在阅读的“字符串”包含 null。但托管字符串不包含它。
也许我可以分配一个足够大的缓冲区来包含终止空值,然后再次调用WriteProcessMemory 来写入空值;或者我可以创建一个足够大的byte[] 来保存字符串+ null,将两者都写入数组,然后像这样传递它。
但是对于这个问题有更优雅的解决方案吗?
【问题讨论】: