从外部源向Windows调试器发送调试事件 我创建了一套多平台C++组件来加载和管理各种类型的数字签名共享库。这将处理加载和初始化的所有方面,包括将它们映射到调用过程、应用分支修复、绑定任何导入以及调用初始化入口点。组件不能使用LoadLibrary(),因为它是特定于平台的,并且并非所有共享库都是PE格式
我面临的少数遗留问题之一是为目标平台和开发环境提供适当的调试器支持。在MS Windows环境中,这包括让调试器加载由编译器和链接器生成(或从其他源转换)的符号信息。因为库的加载和初始化发生在内核之外,所以调试器从不接收LOAD_DLL_DEBUG_事件和UNLOAD_DLL_DEBUG_事件事件。这导致了以下问题:从外部源向Windows调试器发送调试事件 我创建了一套多平台C++组件来加载和管理各种类型的数字签名共享库。这将处理加载和初始化的所有方面,包括将它们映射到调用过程、应用分支修复、绑定任何导入以及调用初始化入口点。组件不能使用LoadLibrary(),因为它是特定于平台的,并且并非所有共享库都是PE格式,c++,visual-studio,winapi,debugging,windbg,C++,Visual Studio,Winapi,Debugging,Windbg,我面临的少数遗留问题之一是为目标平台和开发环境提供适当的调试器支持。在MS Windows环境中,这包括让调试器加载由编译器和链接器生成(或从其他源转换)的符号信息。因为库的加载和初始化发生在内核之外,所以调试器从不接收LOAD_DLL_DEBUG_事件和UNLOAD_DLL_DEBUG_事件事件。这导致了以下问题: 是否有API或系统调用允许将LOAD\U DLL\U DEBUG\U事件等事件直接发送到调试器 是否有文档化的方式直接与程序或会话调试管理器或机器调试管理器服务通信 是否有API或
我对API/系统调用和方法持开放态度,这些调用和方法是有文档记录的或没有文档记录的,并且需要提升权限才能正常工作。如果我了解问题,您可能会看到:
我认为没有一种方法可以直接将您想要的事件类型(如
LOAD\u DLL\u DEBUG\u EVENT
)发送到进程,至少不容易。
为什么不简单地将库包装在Windows中的普通DLL中?也许您可以在每个“代理”DLL中嵌入自定义模块加载机制,这样您就不需要复制操作系统已经为您提供的那么多功能。为什么需要内核模式调试?@ajay我不需要。我的帖子里有什么不清楚的地方吗?@CaptainObvlious八年后你有没有找到一种发送LOAD\u DLL\u DEBUG\u事件的方法?:)我在为同样的问题寻找同样的东西!我不是在写调试器,我需要向它传递某些事件。但我看到这三个操作都是由操作系统自动执行的。调试器将接收事件。由于调试器使用
CreateProcess(…DEBUG\u PROCESS…
)启动调试器对象,因此很难挂接到调试器循环以发送信息。我可以建议流程监视器从以下开始:。使用此工具,您可能会看到调试器获取事件时发生的情况,并尝试自己发送这些事件。但我认为做这件事并不容易!不幸的是,使用存根dll只能部分解决这个问题。根据共享库的类型,会应用额外的修复,这些修复必须在运行时完成。