c++ - 是否可以调试使用自定义加载程序加载的 dll?

标签 c++ c winapi windbg visual-studio-debugging

我有自己的 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/

相关文章:

c++ - 有没有办法让 Flex 从 DLL 访问 C++ 函数?

c++ - 函数体内的 typedef 是一种不好的编程习惯吗?

c++ - 如何检查 HANDLE 是否有效?

c++ - 与 WM_DPICHANGED 消息一起发送的推荐窗口大小太大

c# - C++ AMP计算与WPF渲染显卡双用性能

c++ - 如何将一个方法中的值返回给同一个类的另一个方法

c - 给定一个字节,从二进制中确定一个特定值

c - 编译C文件的问题

c++ - 控制帧率

c++ - CreateProcessWithTokenW 的 cmdline 参数的最大长度是否有解决方法?