在运行时动态地将代码添加到方法的开头/结尾

Ira*_*chi 9 .net c# clr instrumentation dynamic

我知道instrumentation是一种将跟踪代码动态添加到方法中以启用跟踪和调试的技术.

我想知道这是否只是一个"跟踪"选项,硬编码到CLR中只添加跟踪代码,还是有能力添加任何代码到方法?

例如,我想检查某个类中每个方法调用开头的条件(比如权限).我可以通过在执行时间的方法开头添加动态代码来实现吗?

我不确定这种跟踪"仪表"的工作原理是什么,但我想知道这是否也可以用于其他目标.

Oha*_*esh 4

基本上,您应该做的是编写一个 CLR 探查器并在 C++ 中使用探查器 API
您需要实现 ICorProfilerCallback 接口。
您正在寻找的是 JITCompilationStarted 回调中的内容。每次调用托管方法时以及 jit 编译器将 IL 编译为机器代码之前,都会调用此方法。运行时的任何代码插入工作都应该在 JITCompilationStarted 中完成。
您可以查看开源覆盖工具部分 cover作为示例,了解如何执行此操作。