【发布时间】:2011-07-19 07:22:25
【问题描述】:
我创建了一组多平台 C++ 组件来加载和管理各种类型的数字签名共享库。它处理加载和初始化的所有方面,包括将它们映射到调用进程、应用分支修复、绑定任何导入和调用初始化入口点。组件不能使用 LoadLibrary(),因为它是特定于平台的,并且并非所有共享库都是 PE 格式。
我面临的少数几个剩余问题之一是为目标平台和开发环境提供适当的调试器支持。在 MS Windows 环境中,这包括让调试器加载由编译器和链接器生成的符号信息(或从其他源转换而来)。因为库的加载和初始化发生在内核之外,调试器永远不会收到 LOAD_DLL_DEBUG_EVENT 和 UNLOAD_DLL_DEBUG_EVENT 事件。这导致以下问题:
- 是否存在允许将 LOAD_DLL_DEBUG_EVENT 等事件直接发送到调试器的 API 或系统调用?
- 是否有书面方法可以直接与程序或会话调试管理器或机器调试管理器服务进行通信?
- 是否有 API 或系统调用可用于通知内核以及随后的调试器已加载 DLL?由于 PE 文件是主要支持的格式之一,因此这是最理想的选择。它还具有允许库出现在进程的模块列表中的潜在好处。
- WinDBG SDK 是否适用于整个 Windows 上的调试,是否可以使用 WinDBG 扩展来指示调试器加载符号信息?
我已经广泛搜索了有关上述主题的信息,但没有找到。我找到了一些有关 Windows 调试器使用的数据结构的信息,但与我的具体情况无关。
我对记录或未记录的 API/系统调用和方法以及需要提升权限才能运行的方法持开放态度。
【问题讨论】:
-
为什么需要内核模式调试?
-
@ajay 我没有。我的帖子中有什么不清楚的地方吗?
-
@CaptainObvlious 8 年后你找到发送 LOAD_DLL_DEBUG_EVENT 的方法了吗? :) 我正在为同样的问题寻找同样的东西!
标签: c++ visual-studio winapi debugging windbg