【发布时间】:2010-08-12 22:27:08
【问题描述】:
我有一个正在运行的进程,它正在使用“Test.dll”。我想知道Test.dll开始在内存中的确切内存位置,但是好像不能。
我的主要问题是我需要从这个 DLL 写入偏移量,但是当我使用 Read/WriteProcessMemory 时,我无法准确输入 Test.dll+一些偏移量。
任何帮助将不胜感激。
【问题讨论】:
我有一个正在运行的进程,它正在使用“Test.dll”。我想知道Test.dll开始在内存中的确切内存位置,但是好像不能。
我的主要问题是我需要从这个 DLL 写入偏移量,但是当我使用 Read/WriteProcessMemory 时,我无法准确输入 Test.dll+一些偏移量。
任何帮助将不胜感激。
【问题讨论】:
好的,一种方法是使用GetModuleHandle() 返回的值。是的,它返回一个HANDLE,但您可以将其转换为适当的指针类型。在 Visual Studio 的 Modules 窗口中比较模块的地址范围,您会发现它与该范围的起始值相同。
更好的方法是使用GetModuleInformation()。您传递的MODULEINFO 结构的第一个字段将包含 DLL 的基地址。
虽然根据 MODULEINFO 的文档:
模块的加载地址与HMODULE值相同。
所以我想只使用 HMODULE 和强制转换就可以了。不管你想做什么,我猜。
如果您想获取远程进程的信息,请使用EnumProcessModules()。
【讨论】: