Циклическая передача сборки — это декомпиляция сборки на ее IL (промежуточный язык) для ее редактирования, а затем повторная компиляция для создания сборки обратно.

В этом посте я собираюсь продемонстрировать, как выполнять циклический обход сборки .NET.
Чтобы выполнить циклический обход, нам нужно

Необходимые инструменты

  • ильдасм
  • Командная строка разработчика Visual Studio
  • csc.exe — компилятор C#

Вот файл C#, который мы собираемся использовать для нашей демонстрации.

Я собираюсь назвать этот файл roundtrip.cs.

В командной строке разработчика VS перейдите к расположению файла roundtrip.cs. Теперь я собираюсь скомпилировать этот файл cs в сборку, в данном случае exe. Вот команда.

Создана сборка. туда и обратно.exe. Если вы запустите эту программу, вы должны получить следующий вывод. Здесь нет ничего необычного.

The answer is 30 Hello, World!

Декомпилировать в IL

Давайте создадим IL-файл для roundtrip.exe, используя ildasm с помощью следующей команды.

ildasm /out=roundtrip.il roundtrip.exe

Это создаст файл roundtrip.il с кодом IL для roundtrip.exe.

Откройте этот roundtrip.il в любом редакторе. Вы найдете весь код IL в файле. У основного метода в нашем файле C# есть соответствующий раздел в IL. Найдите следующую строку в файле IL.

.method public hidebysig static void Main() cil managed

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

.locals init (int32 V_0, int32 V_1) 
IL_0000: nop 
IL_0001: ldc.i4.s 10 
IL_0003: stloc.0 
IL_0004: ldc.i4.s 20 
IL_0006: stloc.1 
IL_0007: ldstr "The answer is {0}" 
IL_000c: ldloc.0 
IL_000d: ldloc.1 
IL_000e: add

Редактировать ИЛ

Теперь для части редактирования давайте изменим операцию сложения на умножение. Заменить добавить в mul

Есть строка Hello World, давайте изменим эту строку на Hello Dev.

До:

IL_001a: ldstr "Hello, World!"

После:

IL_001a: ldstr "Hello, Dev!"

Обязательно сохраните файл IL.

Перекомпилировать в сборку

Теперь пришло время перекомпилировать. В командной строке VS dev введите следующую команду. Обратите внимание, что на этот раз мы используем ILASM, а не ILDASM. Передаем отредактированный IL-файл команде.

Если ошибок в IL нет, то следует найти новый roundtrip.exe. Когда вы запустите его, вы должны увидеть следующий вывод.

The answer is 200 Hello, Dev!

Надеюсь, вам было интересно. Спасибо за внимание.

Привет 🍺

Болели глаза?

dev.to теперь имеет темный режим.

Перейдите в раздел Разное Ваши настройки и выберите ночную тему ❤️

Первоначально опубликовано на https://dev.to 25 июня 2019 г.