Могу ли я вставить несколько строк моего кода в кого-то еще. NET DLL? - PullRequest
2 голосов
/ 23 июня 2010

Я хочу заменить одну строку кода в API сторонних разработчиков своим собственным кодом.

Я имею в виду, что это сомнительная практика, но мне нужно исправить их ошибку.

Ответы [ 9 ]

6 голосов
/ 23 июня 2010

Не потворствуйте разборке кода стороннего или коммерческого программного обеспечения, но есть способ, который может работать.

Если вы используете Reflector с плагином Reflexil , вы можете удалить строгое имяподпись и внедрение / изменение кода в сборке.

5 голосов
/ 23 июня 2010

Можно, но вы будете работать с MSIL, а не с C #.

http://ccimetadata.codeplex.com/ http://www.mono -project.com / Cecil

Также вы можете декомпилировать dll с помощью Reflector.NET, исправить ошибку и вернуть ее обратно.

3 голосов
/ 23 июня 2010

Да, вы можете. С одной стороны, сборка DLL - это просто CIL (Common Intermediate Language). В принципе, вы можете изменить это непосредственно сами.

Например, вы можете использовать такой инструмент, как Сесил:

http://www.mono -project.com / Cecil

Вы также можете декомпилировать его с помощью такого инструмента, как Reflector, на язык, который вам наиболее удобен. В этот момент вы можете просто изменить код и перекомпилировать его в свою собственную сборку.

http://www.red -gate.com / продукты / отражатель /

Сесил также имеет декомпилятор:

http://evain.net/blog/articles/2008/12/15/cecil-decompiler

MonoDevelop (Mono IDE) позволяет открывать сборку как проект. Просто откройте DLL как файл проекта и (если у него достаточно отладочной информации), он будет выглядеть как проект кода, который вы затем сможете изменить и собрать.

http://monodevelop.com/

Все эти инструменты можно использовать в Microsoft .NET или Mono. MonoDevelop можно установить в Windows, не устанавливая Mono вообще.

Конечно, я говорю, что вы можете. Я не обязательно подтверждаю, что вы делаете. Вам придется самостоятельно разобраться с юридической и этической стороной, так как вы знаете больше о своей ситуации.

3 голосов
/ 23 июня 2010

Рассматривали ли вы попытку прокси и перехвата вызовов с помощью инструмента AOP , например Postsharp или LinFu?

Объяснение: AoP-структуры (Aspect-Oriented Programming) позволяютвам вводить поведение перед вызовами после и перенаправлять вызовы.Дополнительная информация здесь

Некоторые дополнительные преимущества этого изменения по сравнению с изменением MSIL:

  • Исправление выдержит обновления сторонней библиотеки dll (данный API стабилен)
  • Вы должны соблюдать условия лицензирования
  • Вы можете легко удалить прокси, если они исправят рассматриваемый метод
1 голос
/ 23 июня 2010

Если это не позволяет вам внедрить свой собственный код, и вы не получаете исходный код, у вас нет возможности сделать это законным способом.

Сборки обычно подписываются иты не можешь это изменить.Кроме того, большая часть программного обеспечения защищена авторскими правами.

Если вы являетесь важным клиентом для этого поставщика, попросите код.И конечно за право исправить эту ошибку.

0 голосов
/ 24 июня 2010

Если подумать об этом немного иначе, возможно ли разрешить IP с DNS при запуске приложения, прежде чем задействовать фиктивный компонент, а затем поместить запись в файл HOSTS в system32 \ drivers \ etc, и таким образом вына самом деле вам больше не нужно выходить в DNS (хорошо, но это должно быть почти мгновенно).

Вы также можете вместо того, чтобы пытаться сделать это через сборку, посмотрите на инъекцию API-интерфейса Windows DLLметоды перехвата вызова DNS Resolver для выполнения кэширования.

0 голосов
/ 23 июня 2010

Если это небольшая модификация, вам может повезти, если вы попытаетесь выполнить код с помощью ildasm, а затем ilasm.

0 голосов
/ 23 июня 2010

Почему бы просто не переписать ошибочный метод самостоятельно (внутри собственного кода) и использовать его вместо внешней библиотеки?

0 голосов
/ 23 июня 2010

Если у вас есть доступ к исходному коду, почему бы не внести изменения и перекомпилировать?

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