Winapi 使用Windbg获取第三方模块列表?

Winapi 使用Windbg获取第三方模块列表?,winapi,windbg,crash-dumps,Winapi,Windbg,Crash Dumps,我正在使用windbg检查应用程序发送的一些崩溃转储。在我看到的崩溃和将某个第三方DLL加载到进程(我怀疑是一个脆弱的Winsock LSP)之间似乎存在某种关联。为了使这类分析在将来变得更容易,是否有一个windbg脚本只会向我显示非Microsoft模块的列表?这将使崩溃之间的模式对我来说更加明显。我正在使用“lm D sm”,但是现在手动查看列表是一件痛苦的事情 谢谢 您可以使用cdb编写调试器脚本,它只打印到stdout—打开崩溃转储,让它打印加载的模块列表,然后退出,然后您可以使用您最

我正在使用windbg检查应用程序发送的一些崩溃转储。在我看到的崩溃和将某个第三方DLL加载到进程(我怀疑是一个脆弱的Winsock LSP)之间似乎存在某种关联。为了使这类分析在将来变得更容易,是否有一个windbg脚本只会向我显示非Microsoft模块的列表?这将使崩溃之间的模式对我来说更加明显。我正在使用“lm D sm”,但是现在手动查看列表是一件痛苦的事情


谢谢

您可以使用cdb编写调试器脚本,它只打印到stdout—打开崩溃转储,让它打印加载的模块列表,然后退出,然后您可以使用您最喜欢的文本操作工具(提示:其名称为Perl;))搜索列表


编辑:只是为了添加一些额外的信息,cdb是WinDbg的命令行版本;它们都使用相同的引擎,只是不同的前端。

我不知道您为什么要这样做,但您可以将WinDbg输出到日志,并与DLL列表关联。这在任何脚本语言(如Perl、Python等)中都很容易做到。

尝试使用“lm e”,将符号路径设置为Microsoft的符号服务器(并且仅加载MS符号)。这将导致WinDbg显示具有任何类型符号“问题”的所有模块的列表,包括尚未加载的模块

实现这一目标的关键是:

  • sympath仅设置为使用MS符号存储(使用“.symfix”实现此目的)
  • 符号已使用上述符号加载

  • 从那里,您可以添加“lm”的其他选项,以获取完整路径等信息。

    我现在执行此操作的方式是从Windows安装调试工具的CLR10目录运行sos.dll

    .load clr10\sos
    !sam c:\temp\modules
    
    我在Windows资源管理器中打开目录c:\temp\modules。我在标题列中单击鼠标右键,然后为“公司”添加该列。然后我对公司进行排序,并将“Microsoft Corporation”公司的DLL移动到一个名为“Microsoft”的单独子目录中

    目录中剩下的DLL通常是第三方或自定义开发的代码

    谢谢,
    Aaron

    不久前,我编写了一个小的命令行应用程序来解决这个问题