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

标签 .net profiling instrumentation il

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

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

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

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

最佳答案

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

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

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

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

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

    相关文章:

    c# - xPath 通过 XPathNavigator 对象而不是通过表达式求值来查找祖先

    c# - 如何检查是否已过期

    java - 如何正确计时用 Java Spring MVC 编写的配置文件 API?

    c++ - 如何在没有 native 文件系统的情况下使用 gcc 检测选项

    Javassist:ClassPool.makeClass() 的副作用?

    c# - 我如何管理空检查的冲击?

    java - 最新的 Java 分析器

    haskell - 如何在 cabal-dev 安装中启用分析?

    java - 无法解析 : Intent when instrumentation-testing android activities 的 Activity

    .net - UITypeEditor 和 IExtenderProvider