如何在不引发警告的情况下正确使用 ReadProcessMemory
How to properly use ReadProcessMemory without raising warnings
正确的使用方法是什么ReadProcessMemory
?
我目前是这样使用的:
DWORD read_mem(DWORD addr)
{
DWORD buffer = 0x0;
if (!ReadProcessMemory(phandle, LPCVOID(addr), &buffer, sizeof(DWORD), nullptr))
{
return false;
}
return buffer;
}
由于 addr
被错误地转换,这会导致警告。
warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
我见过的其他示例代码,例如 this 使用相同的方法。
那么在没有收到警告的情况下使用此功能的正确方法是什么?
"从不同大小的整数 转换为指针 " - 这意味着 DWORD
和 void*
是不同的字节大小,只有在为 64 位编译代码时才会发生这种情况,因为它们在 32 位编译中的字节大小相同。
来自 MSDN 文档,Windows Data Types:
DWORD
A 32-bit unsigned integer. The range is 0 through 4294967295 decimal.
A DWORD
根本不足以容纳 64 位内存地址(您提到的 other code 同样只能在 32 位中正常工作)。
将 Addr
(以及您用来确定 Addr
值的任何代码)更改为使用 DWORD_PTR
:
DWORD_PTR
An unsigned long type for pointer precision. Use when casting a pointer to a long type to perform pointer arithmetic. (Also commonly used for general 32-bit parameters that have been extended to 64 bits in 64-bit Windows.)
然后 Addr
将是正确的字节大小,无论您是为 32 位还是 64 位编译。
正确的使用方法是什么ReadProcessMemory
?
我目前是这样使用的:
DWORD read_mem(DWORD addr)
{
DWORD buffer = 0x0;
if (!ReadProcessMemory(phandle, LPCVOID(addr), &buffer, sizeof(DWORD), nullptr))
{
return false;
}
return buffer;
}
由于 addr
被错误地转换,这会导致警告。
warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
我见过的其他示例代码,例如 this 使用相同的方法。
那么在没有收到警告的情况下使用此功能的正确方法是什么?
"从不同大小的整数 转换为指针 " - 这意味着 DWORD
和 void*
是不同的字节大小,只有在为 64 位编译代码时才会发生这种情况,因为它们在 32 位编译中的字节大小相同。
来自 MSDN 文档,Windows Data Types:
DWORD
A 32-bit unsigned integer. The range is 0 through 4294967295 decimal.
A DWORD
根本不足以容纳 64 位内存地址(您提到的 other code 同样只能在 32 位中正常工作)。
将 Addr
(以及您用来确定 Addr
值的任何代码)更改为使用 DWORD_PTR
:
DWORD_PTR
An unsigned long type for pointer precision. Use when casting a pointer to a long type to perform pointer arithmetic. (Also commonly used for general 32-bit parameters that have been extended to 64 bits in 64-bit Windows.)
然后 Addr
将是正确的字节大小,无论您是为 32 位还是 64 位编译。