在.NET应用程序中查看所有调用的最简单方法(分析/检测)

时间:2012-08-18 19:03:02

标签: .net profiling instrumentation il

我正在尝试编写一个.NET应用程序,该应用程序可以分析其他.NET进程并列出它们所做的所有调用,包括传递参数的值。

我理解用“ICorProfilerCallback2”之类的东西编写自己的探查器可以对此有所帮助,但这似乎是一项非常具有挑战性的任务。在进行之前,我想确保这是唯一的方法。

我研究了开源.NET分析器和类似封面,CLR Profiler v4.0等等,但它们似乎都没有提供托管API来实现这一点,而且它们的功能远远超出我的需要(记忆分析等。)。

还有其他办法吗?一种更简单的方法来进行这种分析?我在这里有什么选择?

1 个答案:

答案 0 :(得分:1)

我们曾使用Mono Cecil编写了这样一个工具。

使用Cecil,您可以将IL代码发送到现有程序集中。这样,您就可以在每个方法的开头添加对您的托管DLL的调用。

然而,由于需要考虑许多情况,IL注入非常棘手,但这是可行的。好的一面是:一旦你的托管DLL被调用,所有的代码都可以用高级方式编写(例如C#),所以“唯一”棘手的部分就是编织对你的API的调用。

使用Cecil检测的工作流程可能如下所示:

  1. 获取二进制文件(构建或下载)
  2. 使用您自己的使用Cecil的后编译器
  3. 对它们进行检测
  4. 运行修改后的程序集,然后调用托管DLL
  5. 您的DLL存储或分析数据