【问题标题】:Would it theoretically be possible to manipulate a .NET assembly so that everything becomes public?理论上是否可以操纵 .NET 程序集以使所有内容都公开?
【发布时间】:2011-03-26 23:18:15
【问题描述】:

我对 CIL 了解不多,除了程序集中有记录类型信息的元数据。
是否有可能创建一些能够读取 C# 或 VB.NET 程序集并更改其元数据以使所有类成员公开的反映工具?
会很简单(例如,为 CIL 中的每个方法更改一个或两个字节)吗?

【问题讨论】:

    标签: c# .net vb.net reflection


    【解决方案1】:

    是的,这是可能的,但并不总是安全的。有一些代码使用反射 API 来查找类型、方法、字段等。如果代码显式查找非公共的,将它们公开将破坏代码。同样,如果代码查找公共代码并期望不包含非公共代码,那么再次将这些代码公开将破坏代码。

    据我所知,执行此操作的最佳工具是 Mono.Cecil,这是一个可以读取、操作和编写 .NET 程序集的开源库。

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-26
        • 2023-01-20
        • 2019-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-29
        • 2010-10-28
        相关资源
        最近更新 更多