eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 1 марта!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: asmerdev1, Ferdik, shura_k, veggav (+5 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Вопросы новичков —› Как добавить в скомпилированную .NET сборку свой код?
Посл.ответ Сообщение


Ранг: 71.1 (постоянный)
Статус: Участник

Создано: 21 февраля 2015 16:49 New!
Цитата · Личное сообщение · #1

Совсем ламер в .net, как программно добавить свой код в скомпилированную сборку на C# ?
Допустим это несколько строчек кода на C#. Вопросы такие:

- Как транслировать эти строчки C# в байткод?
- Как внедрить этот байткод в скомпилированную сборку .NET?


Ранг: 747.9 (! !)
Статус: Участник
bytecode!

Создано: 21 февраля 2015 17:13 New!
Цитата · Личное сообщение · #2

Какова конечная цель?

jangle пишет:
- Как транслировать эти строчки C# в байткод?

Скомпилировать (в той же VS).

jangle пишет:
- Как внедрить этот байткод в скомпилированную сборку .NET?

Много способов. Самые популярные - пропатчить сборку (тут тоже несколько вариантов - от прямого внедрения вашего IL до внедрения подгрузки вашей dll например) либо заинжектить своё добро в нужный домен.

Ранг: 77.0 (постоянный)
Статус: Участник

Создано: 21 февраля 2015 17:23 · Поправил: v00doo New!
Цитата · Личное сообщение · #3

jangle можно ildasm -> ilasm:
http://habrahabr.ru/post/234101/

А нужный кусок просто самому собрать в VS и так же посмотреть.


Ранг: 71.1 (постоянный)
Статус: Участник

Создано: 21 февраля 2015 17:25 New!
Цитата · Личное сообщение · #4

4kusNick пишет:
Какова конечная цель?


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

Code:
  1.   private string ReadData(LabelType labelType, int bytesLen)
  2.         {
  3.              int readPower = labelType.ReadPower;
  4.              int writePower = labelType.WritePower;
  5.              .....
  6.          }


а чтобы стало:

Code:
  1.      private string ReadData(LabelType labelType, int bytesLen)
  2.         {
  3.  
  4.             int readPower = labelType.ReadPower;
  5.             int writePower = labelType.WritePower;
  6.  
  7.             if (readPower < 1 || readPower > 30) readPower = 16;
  8.             if (writePower < 1 || writePower > 30) writePower = 16;
  9.            ......


и чтобы добавляемые строчки брались из текстового файла к примеру


Ранг: 218.9 (наставник)
Статус: Участник
dotnet

Создано: 21 февраля 2015 19:07 New!
Цитата · Личное сообщение · #5

jangle

jangle пишет:
- Как транслировать эти строчки C# в байткод?


Заранее скомпилировать функцию в том виде в котором она вас полностью устраивает. Потом в зависимости от ваших целей, вы либо сделает патч, с помощью какого нибудь IL редактора. Либо можете это сделать сами с помощью библиотеки mono.cecil.

| Сообщение посчитали полезным: jangle



Ранг: 747.9 (! !)
Статус: Участник
bytecode!

Создано: 21 февраля 2015 19:28 New!
Цитата · Личное сообщение · #6

jangle пишет:
 if (readPower < 1 || readPower > 30) readPower = 16;
 if (writePower < 1 || writePower > 30) writePower = 16;


Такое можно вручную добавить прямо в байткоде, там все крайне просто, даже новых переменных объявлять не придётся.

Если же вы хотите подгружать это откуда-то - значит надо emit юзать, генерировать на лету из подгруженных констант, что уже посложнее.

Добавлено спустя 2 минуты
Nimnul пишет:
с помощью библиотеки mono.cecil

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

| Сообщение посчитали полезным: jangle

 eXeL@B —› Вопросы новичков —› Как добавить в скомпилированную .NET сборку свой код?
Эта тема закрыта. Ответы больше не принимаются.

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS