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

dr.*_*vil 5 .net instrumentation il profiling

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

我知道用"ICorProfilerCallback2"之类的东西编写我自己的探查器可以对此有所帮助,但这似乎是一项非常具有挑战性的任务.在进行之前,我想确保这是实现这一目标的唯一方法.

我看着开源.NET剖析和一致好评,如部分覆盖,CLR探查器4.0版等,但他们都不似乎提供了一个管理API来做到这一点,他们做的远远超过我所需要的(内存分析等).

有没有其他方法可以做到这一点?一种更简单的方法来进行这种分析?我在这里有什么选择?

Nob*_*are 1

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

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

然而,IL注射相当棘手,因为有很多情况需要考虑,但它是可行的。好的一面是:一旦您的托管 DLL 被调用,您的所有代码都可以以高级方式(例如 C#)编写,因此“唯一”棘手的部分是将调用编织到您的 API。

使用 Cecil 仪器的工作流程可能如下所示:

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