我有一些c ++代码在第一次调用它时在Windows上加载调试符号,但是(如果它们在第一次命中代码后加载时)显然没有被加载。每次我的例程被击中时,我都不可能重新加载符号,所以我希望有一些回调,如果dll是延迟加载的话我可以得到通知。
答案 0 :(得分:1)
这是可能的,您可以编写自己的延迟加载辅助函数,而不是使用默认函数。在这个问题中详细说明并没有多大意义,在MSDN Library中有很好的解释。起始页面is here,“理解帮助函数”部分的内容很有趣。
答案 1 :(得分:1)
嗯,你有两种方法可以捕获大部分内容(主要是因为这不会得到手动映射的文件),你可以在LoadLibraryA\W
和LoadLibraryEx
上放置一个系统范围的挂钩(或者内核映射)和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
}