我有自己的 LoadLibrary 函数 (MyLoadLibrary) 实现,它成功加载 dll (foo.dll) - 执行重定位和解析符号。但是我无法调试 foo.dll 中的代码 - visual studio(和 windbg)调试器无法识别 foo.dll 中的断点
我发现调试器可以处理 DEBUG_EVENT结构,也许我可以为 MyLoadLibrary 生成这样的 DEBUG_EVENT (LOAD_DLL_DEBUG_INFO) 并将此事件发送到调试器?
我还找到了函数 SymLoadModuleEx - 我可以设置我的 dll 的 baseAddress 和图像大小(因为我自己加载了 foo.dll),我试图从调试器调用它但它没有帮助,我认为这个函数必须从调试器调用。
有没有办法获得 foo.dll 的源代码级调试?
最佳答案
我找到了类似的解决方案:我使用::LoadLibraryEx 执行库加载带有特殊标志:DONT_RESOLVE_DLL_REFERENCES。当这个函数完成时,我在进程内存中加载并重新定位了 dll 镜像,之后我以我自己的方式手动解析所有 dll 导入,这种方法也保留了源代码级调试。
关于c++ - 是否可以调试使用自定义加载程序加载的 dll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20281107/