理论上是否可以操纵.NET程序集以使所有内容都公开?

时间:2010-08-08 14:51:28

标签: c# .net vb.net reflection

我对CIL知之甚少,只是程序集中有元数据记录类型信息。
是否有可能创建一些能够读取C#或VB.NET程序集并更改其元数据的反射工具,以便所有类成员都公开?
它是否直截了当(例如,为CIL中的每个方法更改一个或两个字节)?

4 个答案:

答案 0 :(得分:3)

是的,这是可能的,但并不总是安全的。野外存在使用Reflection API查找类型,方法,字段等的代码。如果代码明确地查找非公共代码,那么将它们公开会破坏代码。同样,如果代码查找公共代码并期望不包含非公开代码,那么再次公开将会破坏代码。

我所知道的最好的工具是Mono.Cecil,它是一个可以读取,操作和编写.NET程序集的开源库。

答案 1 :(得分:1)

通过示例证明:当您使用调试器时,您可以看到对象的私有成员,包括从其他程序集导入的对象。

答案 2 :(得分:0)

答案 3 :(得分:0)

如果程序集具有强名称,则您将无法将修改后的程序集替换为原始程序集。