在 C++ 中查找进程中已加载 DLL 的内存地址;
我有一个正在使用“Test.dll”的正在运行的进程。我想知道内存中 Test.dll 开始的确切内存位置,但似乎无法。
我的主要问题是我需要写入此 DLL 的偏移量,但当我使用 Read/WriteProcessMemory 时,我无法准确输入 Test.dll + 一些偏移量。
任何帮助将不胜感激。
I've got a running process which is using 'Test.dll'. I would like to know the exact memory location of the start of Test.dll in memory, but can't seem to be able to.
My main problem is that I need to write to an offset from this DLL, but I can't exactly type in Test.dll+some offset when I use Read/WriteProcessMemory.
Any help would be greatly appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
好的,一种方法是使用
GetModuleHandle()
返回的值。是的,它返回一个HANDLE
,但您可以将其转换为适当的指针类型。与 Visual Studio 的“模块”窗口中的模块地址范围进行比较,您将看到它与该范围的起始值相同。更好的方法是使用 GetModuleInformation() 。 MODULEINFO 的第一个字段结构您pass 将包含 DLL 的基地址。
虽然根据 MODULEINFO 的文档:
所以我想只使用 HMODULE 和转换就可以了。我想无论你想做什么。
如果您想获取远程进程的信息,请使用 EnumProcessModules()。
Okay, so one way to do it is to use the value returned by
GetModuleHandle()
. Yes, it returns aHANDLE
, but you can cast that to the appropriate pointer type. Compare to the module's address range in the Modules window of Visual Studio and you'll see it is the same as the starting value for the range.A better way to do it is to use GetModuleInformation(). The first field of the MODULEINFO structure you pass will contain the base address of the DLL.
Though according to the documentation of MODULEINFO:
So I guess just using the HMODULE and casting is okay. Whatever you want to do, I guess.
If you want to get the info for a remote process, use EnumProcessModules().