我正在尝试编写一个.NET应用程序,该应用程序可以分析其他.NET进程并列出它们所做的所有调用,包括传递参数的值。
我理解用“ICorProfilerCallback2”之类的东西编写自己的探查器可以对此有所帮助,但这似乎是一项非常具有挑战性的任务。在进行之前,我想确保这是唯一的方法。
我研究了开源.NET分析器和类似封面,CLR Profiler v4.0等等,但它们似乎都没有提供托管API来实现这一点,而且它们的功能远远超出我的需要(记忆分析等。)。
还有其他办法吗?一种更简单的方法来进行这种分析?我在这里有什么选择?
答案 0 :(得分:1)
我们曾使用Mono Cecil编写了这样一个工具。
使用Cecil,您可以将IL代码发送到现有程序集中。这样,您就可以在每个方法的开头添加对您的托管DLL的调用。
然而,由于需要考虑许多情况,IL注入非常棘手,但这是可行的。好的一面是:一旦你的托管DLL被调用,所有的代码都可以用高级方式编写(例如C#),所以“唯一”棘手的部分就是编织对你的API的调用。
使用Cecil检测的工作流程可能如下所示: