2015-04-20 3 views
-1

Мне интересно, могу ли я изменить функцию в system.dll как вместо возврата 0; я меняю его на возврат -1;Могу ли я изменить функцию в system.dll?

и перекомпилируйте его и используйте снова.

Если да, то как мы можем это сделать?

+0

Это действительно плохо, потому что это сломает весь другой код, который полагается на эту функцию, возвращающую 0. Не могли бы вы объяснить более подробно, почему вам нужно изменить его, возможно, есть лучший путь, чем пытаться перекомпилировать основную библиотеку ... –

+0

Какую цель вы ставите? Шалость? И, конечно же, вы признаете, что если бы вы могли сделать что-то подобное, ваша «злая» версия System.dll не была бы подписана Microsoft, верно? –

+0

На самом деле трудно представить, зачем вам это нужно – demonplus

ответ

3

Нет, вы не можете. Вы не можете, потому что не можете строго подписывать сборку, которую вы создадите подписи Microsoft, и поэтому все остальные сборки, ссылающиеся на сборку системы, будут жаловаться (я знаю это, потому что две недели назад я попытался сделать что-то подобное:), но я не хотел перекомпилировать. Для меня было достаточно использовать Mono.Cecil для непосредственного редактирования копии сборки системы).

Если вы пишете модульные тесты, вы можете использовать Fakes (требуется Visual Studio Premium). Это позволяет переадресовывать методы сборки в ваш код, контролируя вывод и то, что делает этот метод.

Технически вы можете делать то, что делает «библиотека» подделок: http://www.codeproject.com/Articles/453065/ILRewriting-for-beginners Но обратите внимание, что это сложно. Вы создаете «бегун» для своего exe в C/C++. Этот «бегун» (это технически хост CLR) может переписать «на лету» код .NET сборки.

Смежные вопросы