字符串中的内存地址
本文关键字:地址 内存 字符串 | 更新日期: 2023-09-27 17:59:44
我有写内存的功能,但我想从字符串中导入地址,如何做到这一点?代码:
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool WriteProcessMemory(int hProcess, int lpBaseAddress,
byte[] lpBuffer, int dwSize, ref int lpNumberOfBytesWritten);
这个:
WriteProcessMemory((int)processHandle, 0xffffffff, buffer, buffer.Length, ref bytesWritten);
我想把这个"0xffffffff"
换成string
,但我不知道怎么做。我尝试将带地址的字符串转换为int,但这不起作用。
使用类似于的东西
string str = "0xffffffffffffffff";
if (str.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
{
str = str.Substring(2);
}
IntPtr ptr = (IntPtr)long.Parse(str, NumberStyles.HexNumber);
注意,long.Parse
不支持0x
,所以如果存在,我会将其删除。
我使用long.Parse
来支持64位系统和32位系统。
请注意,您使用的PInvoke签名是错误的。。。它适用于32位,但与32位和64位兼容的通用版本是:
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool WriteProcessMemory(
IntPtr hProcess,
IntPtr lpBaseAddress,
byte[] lpBuffer,
IntPtr dwSize,
out IntPtr lpNumberOfBytesWritten);
如果您需要操作IntPtr
,您应该始终将它们转换为long
,因为IntPtr
可以是32或64位,所以long
可以始终包含它。