Возможно ли теоретически манипулировать сборкой .NET, чтобы все стало общедоступным? - PullRequest
2 голосов
/ 08 августа 2010

Я мало что знаю о CIL, за исключением того, что в сборках есть метаданные, которые записывают информацию о типе.Можно ли было бы создать какой-нибудь отражающий инструмент, способный читать сборку C # или VB.NET и изменять ее метаданные так, чтобы все члены класса стали общедоступными?Будет ли это просто (например, изменить один или два байта для каждого метода в CIL)?

Ответы [ 4 ]

3 голосов
/ 08 августа 2010

Да, это возможно, но это не всегда безопасно. В дикой природе есть код, который использует Reflection API для поиска типов, методов, полей и т. Д. Если код явно ищет непубличные, их публикация приведет к нарушению кода. Точно так же, если код ищет общедоступные и ожидает, что непубличные, не будут включены, повторная публикация этих кодов нарушит код.

Лучшим из известных мне инструментов для этого является Mono.Cecil , библиотека с открытым исходным кодом, которая может читать, манипулировать и записывать сборки .NET.

1 голос
/ 08 августа 2010

Подтверждение на примере: когда вы используете отладчик, вы можете видеть закрытые элементы объектов, в том числе импортированные из других сборок.

0 голосов
/ 08 августа 2010

Если сборка имеет строгое имя, вы не сможете заменить измененную сборку оригиналом.

0 голосов
/ 08 августа 2010

Да. Смотрите эту статью:

http://msdn.microsoft.com/en-us/magazine/cc188743.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...