我创建了一组多平台C ++组件来加载和管理各种类型的数字签名共享库。这将处理加载和初始化的所有方面,包括将它们映射到调用进程,应用分支修复,绑定任何导入并调用初始化入口点。组件不能使用LoadLibrary(),因为它是特定于平台的,并非所有共享库都是PE格式。
我面临的少数几个问题之一是为目标平台和开发环境提供适当的调试器支持。在MS Windows环境中,这包括让调试器加载由编译器和链接器生成的符号信息(或从其他源转换)。由于库的加载和初始化发生在内核之外,因此调试器永远不会收到LOAD_DLL_DEBUG_EVENT和UNLOAD_DLL_DEBUG_EVENT事件。这导致了以下问题:
我已经广泛搜索了有关上述主题的信息,但已经做得很短。我找到了一些有关Windows调试器使用的数据结构的信息,但与我的具体情况无关。
我对API /系统调用以及记录或未记录的方法以及那些需要提升权限才能运行的方法持开放态度。
答案 0 :(得分:3)
我认为没有办法直接将您想要的事件(如LOAD_DLL_DEBUG_EVENT
)发送到流程,至少不容易。
为什么不简单地将库包装在Windows中的普通DLL中?也许您在每个“代理”DLL中嵌入了自定义模块加载机制,这样您就不需要复制操作系统已经为您提供的那么多功能。
答案 1 :(得分:1)
如果我理解了这个问题,你可能会看到: