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

我了解使用“ICorProfilerCallback2”之类的代码编写自己的探查器可以帮助解决此问题,但这似乎是一项艰巨的任务。在进行此操作之前,我想确保这是执行此操作的唯一方法。

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

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

最佳答案

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

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

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

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

  • 获取您的二进制文件(构建或下载)
  • 使用自己的使用Cecil的后编译器对它们进行检测
  • 运行修改后的程序集,依次调用托管DLL
  • 您的DLL存储或分析数据
  • 关于.net - 监视.NET应用程序中所有调用的最简单方法(分析/检测),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12021430/

    10-11 23:15
    查看更多