5

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

我知道用“ICorProfilerCallback2”之类的东西编写我自己的分析器可以帮助解决这个问题,但这似乎是一项非常具有挑战性的任务。在开始之前,我想确定这是做到这一点的唯一方法。

我研究了开源 .NET 分析器等,例如 part-cover、CLR Profiler v4.0 等,但它们似乎都没有提供托管 API 来执行此操作,而且它们所做的远远超出我的需要(内存分析等.)。

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

4

1 回答 1

1

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

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

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

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

  1. 获取您的二进制文件(构建或下载)
  2. 使用您自己的使用 Cecil 的后编译器来检测它们
  3. 运行修改后的程序集,然后调用您的托管 DLL
  4. 您的 DLL 存储或分析数据
于 2014-01-15T21:53:45.137 回答