C++ WinAPI 读取进程内存

标签 c++ function winapi readprocessmemory

我刚开始学习 WinAPI,我偶然发现了函数的不同变量。 现在我正在为 ReadProcessMemory 苦苦挣扎。 代码是:

ReadProcessMemory(phandle, (LPVOID)address, &value , sizeof(value), 0);

现在我明白第一个参数是进程的句柄,但我不明白为什么第二个参数(指向基地址的指针)必须是地址的 void (LPVOID) .

在 MSDN 中它说: 指向指定进程中要从中读取的基地址的指针。在发生任何数据传输之前,系统会验证指定大小的基地址和内存中的所有数据是否都可以进行读取访问,如果不可访问,则函数失败。

那么为什么第二个参数必须是 (LPVOID) 地址而不仅仅是地址?

最佳答案

嗯,lpBaseAddress 是……一个地址,所以它的类型应该是一个指针是有道理的。它指向什么类型?我们不知道,而且这个(WinApi)是 C,所以没有模板——因此 void *。此外,我们不想修改内存,因此 const 是一个很好的措施。

关于您的编辑(为什么要强制转换):这取决于 address 的类型。任何非 volatile 对象指针都可以隐式转换为 void const *,因此在这种情况下不需要强制转换。不过,我想该地址是一个已知的 integer 常量,在这种情况下,需要 reinterpret_cast 将其转换为指针。这是在此处使用 C 风格转换的糟糕风格完成的,但实现了相同的效果。

关于C++ WinAPI 读取进程内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47459679/

相关文章:

c++ - 与 for_each 或 std::transform 一起使用时如何调用 C++ 仿函数构造函数

c++ - 将函数作为参数传递的意义

vb.net - VB.NET 中共享函数内参数和变量的行为

php - PHP 中函数 undefined variable

c++ - 使用 C++ 在 cmd 上绘图

dll - ERROR_INVALID_ORDINAL 究竟是什么意思?

c# - 在 C# 中打开到文件描述符的管道连接

c++ - Qt - 在 QTable 中将复选框居中

c++ - 在 Visual C++ 上,我如何处理带有线程的图像数组(并行)

C++接受成员和外部函数指针