【问题标题】:Finding the memory address of a loaded DLL in a process in C++在 C++ 中的进程中查找已加载 DLL 的内存地址
【发布时间】:2010-08-12 22:27:08
【问题描述】:

我有一个正在运行的进程,它正在使用“Test.dll”。我想知道Test.dll开始在内存中的确切内存位置,但是好像不能。

我的主要问题是我需要从这个 DLL 写入偏移量,但是当我使用 Read/WriteProcessMemory 时,我无法准确输入 Test.dll+一些偏移量。

任何帮助将不胜感激。

【问题讨论】:

    标签: c++ memory dll


    【解决方案1】:

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

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

    虽然根据 MODULEINFO 的文档:

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

    所以我想只使用 HMODULE 和强制转换就可以了。不管你想做什么,我猜。

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

    【讨论】:

    • 查看GetModuleHandle,它在当前运行的进程中寻找模块。如果我想在另一个过程中寻找它怎么办? GetModuleInformation 确实有一个 HANDLE 输入,但它也请求模块句柄,这是我想要得到的。
    猜你喜欢
    • 1970-01-01
    • 2011-01-05
    • 2011-05-26
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 2014-09-06
    • 1970-01-01
    相关资源
    最近更新 更多