我正在阅读
当您调用此函数时,您会传递一个以零结尾的字符串,该字符串指定加载到调用进程地址空间中的可执行文件或 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/