如何判断加载dll的时间

时间:2011-08-17 17:38:47

标签: c++

我有一些c ++代码在第一次调用它时在Windows上加载调试符号,但是(如果它们在第一次命中代码后加载时)显然没有被加载。每次我的例程被击中时,我都不可能重新加载符号,所以我希望有一些回调,如果dll是延迟加载的话我可以得到通知。

5 个答案:

答案 0 :(得分:1)

这是可能的,您可以编写自己的延迟加载辅助函数,而不是使用默认函数。在这个问题中详细说明并没有多大意义,在MSDN Library中有很好的解释。起始页面is here,“理解帮助函数”部分的内容很有趣。

答案 1 :(得分:1)

嗯,你有两种方法可以捕获大部分内容(主要是因为这不会得到手动映射的文件),你可以在LoadLibraryA\WLoadLibraryEx上放置一个系统范围的挂钩(或者内核映射)和PEB链接Ldr *)中的函数,并检查调用进程是否与您的进程匹配。否则,您可以使程序附加到自己并等待dll加载调试事件:http://msdn.microsoft.com/en-us/library/ms679302(v=vs.85).aspx

答案 2 :(得分:1)

也许您正在寻找调试事件 http://msdn.microsoft.com/en-us/library/ms679302(v=VS.85).aspx

好像你正在寻找LOAD_DLL_DEBUG_EVENT。

答案 3 :(得分:0)

你的问题似乎不是很清楚。但我仍然认为你所寻找的是DllMain()。它是DLL的入口点。阅读文档了解详细信息。

既然你在谈论延迟加载,也许你需要看一下LoadLibraryEx()。它用于将DLL加载到进程内存中。

答案 4 :(得分:0)

这样的事情:

HMODULE hKernel32 = NULL;

void myFunc()
{
   if (hKernel32 == NULL)
      hKernel32 = LoadLibrary("kernel32.dll");

   // do stuff here

}