在 C++ 中查找进程中已加载 DLL 的内存地址;

发布于 2024-09-14 03:23:48 字数 175 浏览 3 评论 0原文

我有一个正在使用“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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不可一世的女人 2024-09-21 03:23:48

好的,一种方法是使用 GetModuleHandle() 返回的值。是的,它返回一个 HANDLE,但您可以将其转换为适当的指针类型。与 Visual Studio 的“模块”窗口中的模块地址范围进行比较,您将看到它与该范围的起始值相同。

更好的方法是使用 GetModuleInformation() MODULEINFO 的第一个字段结构您pass 将包含 DLL 的基地址。

虽然根据 MODULEINFO 的文档:

模块的加载地址与HMODULE值相同。

所以我想只使用 HMODULE 和转换就可以了。我想无论你想做什么。

如果您想获取远程进程的信息,请使用 EnumProcessModules()

Okay, so one way to do it is to use the value returned by GetModuleHandle(). Yes, it returns a HANDLE, 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:

The load address of a module is the same as the HMODULE value.

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().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文