附加到正在运行的 Windows 进程

Posted

技术标签:

【中文标题】附加到正在运行的 Windows 进程【英文标题】:Attach to running windows process 【发布时间】:2013-01-29 02:12:34 【问题描述】:

请在下方留言:

1) 附加到正在运行的本机 Windows 应用程序进程、获取线程列表并查看使用了哪些 DDL 的最简单方法是什么?

2) 附加到正在运行的 .NET 应用程序进程、获取线程列表并查看使用了哪些 DDL 的最简单方法是什么?

问候, 罗恩

【问题讨论】:

我认为您的意思是 DLL,而不是 DDL,对吧? 【参考方案1】:

您可以使用Tool Help Library,它可以让您更轻松地获取有关当前正在执行的应用程序的信息。

Thread Walking Module Walking

.Net example 或 search 查找更多信息。


System.Diagnostics 命名空间提供了允许您与系统进程、事件日志和性能计数器交互的类。

ProcessThreadCollection 类提供了一个强类型的 ProcessThread 对象集合。 ProcessModuleCollection 类提供了一个强类型的 ProcessModule 对象集合。

search了解更多

【讨论】:

感谢您的回复。这似乎是问题的前 50%——使用了哪些线程。那么,查看线程正在使用哪些 DDL 的正确方法是什么? 进程是资源的容器,包括DLL,映射到进程的虚拟地址空间。任何进程线程都可以访问整个地址空间和其中的任何 DLL。 谢谢。我应该澄清我关于 DLL 的问题 - 有没有办法查看线程“目前”使用哪些 DLL,即从线程主动调用。 您需要获取线程的堆栈跟踪并检查它当前使用的模块。【参考方案2】:

您使用 Visual Studio 吗?如果是这样,您可以使用 Debug | 将 VS 附加到任何正在运行的进程。附加到进程菜单项。然后您可以进入进程并开始检查堆栈、线程、模块等。

如果您想深入研究,可以下载Windows SDK 并安装调试工具。这将为您提供 KD 和 WinDBG - 分别是控制台调试器和稍微友好的多窗格 MDI 样式调试应用程序。使用这些工具,您可以访问 Windows 中内置的大多数核心调试基础结构。

但是,请注意,这是为了装腔作势,需要大量的时间和精力才能掌握。要真正成为调试大师,您还需要深入了解内核和操作系统的架构以及许多核心操作系统数据结构。

因此,您可能会发现以下书籍很有用:

对于 .NET:

Debugging Applications for .NET and Windows CLR via C#

对于 Windows 和/或 .NET:

Windows Internals 6th edition vol. 1 Windows Internals 6th edition vol. 2

用于高级 Windows 内部调试

Inside Windows Debugging Advanced Windows Debugging

享受吧! :)

【讨论】:

以上是关于附加到正在运行的 Windows 进程的主要内容,如果未能解决你的问题,请参考以下文章

如何调试通过 Windows 调度程序运行的 exe? [复制]

windows Service 之调试过程(附加到进程里调试,而且启动时间不能超过30秒)

什么是windows进程?它分为哪些类型?

附加到进程的 Windows 网络嗅探器

Java项目在windows和linux下显示不同数量的进程

Windows 逆向OD 调试器工具 ( OD 附加进程 | OD 调试器面板简介 | 反汇编窗口 | 寄存器窗口 | 数据窗口 | 堆栈窗口 )