我正在尝试编写一个 .NET 应用程序,它可以分析其他 .NET 进程并列出它们所做的所有调用,包括传递参数的值。
我知道用“ICorProfilerCallback2”之类的东西编写我自己的分析器可以帮助解决这个问题,但这似乎是一项非常具有挑战性的任务。在开始之前,我想确保这是做到这一点的唯一方法。
我研究了开源 .NET 分析器等,例如 part-cover、CLR Profiler v4.0 等,但它们似乎都没有提供托管 API 来执行此操作,而且它们所做的比我需要的要多得多(内存分析等) .)
有没有其他方法可以做到这一点?进行这种分析的更简单方法是什么?我在这里有哪些选择?
最佳答案
我们曾经使用 Mono Cecil 编写了这样一个工具.
使用 Cecil,您可以将 IL 代码发布到现有程序集中。通过这种方式,您可以在每个方法的开头添加对您的托管 DLL 的调用。
然而,IL-injection 是相当棘手的,因为有很多情况需要考虑,但它是可行的。好的一面是:一旦您的托管 DLL 被调用,您的所有代码都可以以高级方式(例如 C#)编写,因此“唯一”棘手的部分是编织对您的 API 的调用。
使用 Cecil 检测的工作流程可能如下所示:
关于.net - 查看 .NET 应用程序中所有调用的最简单方法(分析/检测),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12021430/