【问题标题】:C# app to act like WINDBG's "step into" featureC# 应用程序的行为类似于 WINDBG 的“步入”功能
【发布时间】:2014-08-05 16:38:35
【问题描述】:

我做了很多主要针对 Linux 平台的“学术”安全项目,但最近我对 Windows 产生了一些兴趣。所以我所做的是制作一些小工具,比如一个应用程序来让其他应用程序崩溃等,只是为了引发行为。因此,我不得不大量使用 WINDBG 来逐步执行进程,这非常有用,比 GDB(linux) 更酷。

所以我现在尝试制作的工具本质上就像 WINDBG 中的步进功能。我能做的是将一个进程作为System.Diagnostis.Process 对象启动,并查看所有线程等。但接下来我需要做的是我碰壁的地方。

如何使用 C# 以编程方式“逐步执行”进程,最好使用 System.Diagnostics.Process 类。

我想要实现的基本上是从 WINDBG 获得的相同类型的信息。希望我能够制作一个“宏”系统来自动单步执行程序。

【问题讨论】:

  • Process 类并不是真正为这种情况设计的。改为查看IDebugClient 接口 (msdn.microsoft.com/en-us/library/windows/hardware/…)
  • 创建一个 unmanaged 调试器是可行的,您可以从 winapi 和 DbgHelp api 中的内置调试支持中获得很多帮助。但这些是非托管 api,从 C# 中执行此操作只会使其变得更加困难。检查this web page,某处也应该有一个部分#1。并检查待办事项列表。
  • 谷歌系统内部。这些作者有两本关于这个问题的书。我刚刚给你带来了 2 吨的乐趣。

标签: c# windbg system.diagnostics step-into


【解决方案1】:

http://www.codeproject.com/Articles/371137/A-Mixed-Mode-Stackwalk-with-the-IDebugClient-Inter

你的问题很复杂,真的没有简单的答案。

这是 Mattias Högström 的一个项目,可帮助您入门。他的项目使用IDebugClient 类处理非托管代码,他可以遍历调用堆栈。有了这些知识和The Debugger reference,您可以编写一个 CLR (c++) 和一个接口,以便您可以从您的本机 C# 应用程序访问它。

【讨论】:

  • 这正是我所需要的。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 2014-10-24
  • 1970-01-01
  • 2012-12-15
  • 2010-09-14
相关资源
最近更新 更多