微软伪造的垫片实际上如何在内部工作?

时间:2014-08-13 08:46:10

标签: c# .net moles microsoft-fakes shim

所以我对它的实现方式感兴趣。 基本上:我怎样才能自己重新实现同样的事情? ......我不打算这样做。只是了解。

基本问题是: 怎么可能(?)拦截类实例化呢? 如何在一个案例中用一个实现替换它,在另一个案例中用它的原始或甚至不同的实现来替换它?

如何拦截静态方法或密封类。

这完全是关于垫片/痣,而不是关于存根。

1 个答案:

答案 0 :(得分:6)

这是通过更改编译器发出的公共中间语言(IL)代码来完成的。您可以使用Fody库进行预打包的IL修改。 Fody内部使用mono.cecil库进行低级IL操作。修改编译器生成的IL并将其作为程序集保存到磁盘。

我在Moles [pdf文件]上找到了此参考出版物。第4节解释了代码检测的机制。