windows - GetModuleHandle() 是如何工作的?

标签 windows

我正在阅读 ,它描述了 GetModuleHandle() API 如下:

当您调用此函数时,您会传递一个以零结尾的字符串,该字符串指定加载到调用进程地址空间中的可执行文件或 DLL 文件的名称。 如果系统找到指定的可执行文件或 DLL 名称,GetModuleHandle 返回加载该可执行文件或 DLL 文件镜像的基地址。

我想知道系统在哪里寻找文件名?当我将一些文件加载​​到我的进程地址空间时,是否有一些集中表来存储所有加载文件的名称及其加载地址的映射?如果我们根据字符串匹配来搜索,效率是不是有点低?

非常感谢您的见解。

最佳答案

加载的模块信息在进程的 PEB 中作为链表维护,在名为 PEB_LDR_DATA 的结构中。如果获得 PEB 指针,则可以遍历此列表并获得 DLL 名称、基地址、入口点、大小等信息。查看这些页面:
http://msdn.microsoft.com/en-us/library/aa813708.aspx
http://www.codeproject.com/KB/threads/CmdLine.aspx

关于windows - GetModuleHandle() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4160659/

相关文章:

Windows 10 - 将应用程序添加到左侧导航 Pane

linux - 将 bash 脚本移植到任何可以在 Windows 上运行的东西

c - SDL+OpenGL 在 linux 下工作但在 windows 下不工作,不是编译器/链接器问题

c - 如何从任务管理器中的 "Applications"选项卡隐藏窗口?

c# - 在 C# 中将墨迹加载到 MathInputControl

windows - 如何判断应用程序是否被锁定或只是需要很长时间

windows - 对文件夹中的每个文件运行命令,然后保存输出

C++ 将全局列表传递给线程

C# - 制作 Process.Start 等待进程启动

windows - Kafka 1.0 因 FATAL SHUTDOWN 错误而停止。日志目录失败