Взаимодействие с CIL: модификация файла *.il

Взаимодействие с CIL: модификация файла *.il

Теперь, когда вы понимаете, как компонуется базовый файл CIL, давайте завершим наш эксперимент с челночной технологией разработки программ. С помощью изменения CIL-кода в файле *.il мы должны выполнить следующее.

• Добавить ссылку на компоновочный блок System.Windows.Forms.dll.

• Загрузить локальную строку в Main().

• Вызвать метод System.Windows.Forms.MessageBox.Show(), используя локальную строковую переменную в качестве его аргумента.

Первым шагом является добавление новой директивы.assembly (с атрибутом extern), которая укажет, что используется System.Windows.Forms.dll. Для этого просто добавьте в файл *.il следующую программную логику после ссылки на внешний компоновочный блок mscorlib.

.assembly extern System.Windows.Forms {

 .publickeytoken = (B7 7A 5C 56 19 34 E0 89)

 .ver 2:0:0:0

}

Значение, указанное директивой .ver. может у вас оказаться другим, поскольку оно зависит от версии платформы .NET, установленной на вашей машине. Здесь указано использование System.Windows.Forms.dll версии 2.0.0.0 с кодом открытого ключа В77А5С561934Е089. Если открыть GAC (см. главу 11) и найти там компоновочный блок System.Windows.Forms.dll, можно скопировать правильный номер версии и значение открытого ключа со страницы свойств этого компоновочного блока.

.method private hidebysig static void Main(string[] args) cil managed {

 .entrypoint

 .maxstack 8

 // Задача: написать новый CIL-код.

}

Итак, целью является помещение новой строки в стек и вызов метода MessageBox.Show() (а не метода Console.WriteLine()). Напомним, что при указании имени внешнего типа следует использовать абсолютное имя типа (в совокупности с понятным именем компоновочного блока). С учетом этого обновите метод Main() так, как показано ниже.

.method private hidebysig static void Main(string[] args) cil managed {

 .entrypoint

 .maxstack 8

 ldstr "CIL работает прекрасно!"

 call valuetype [System.Windows.Forms] System.Windows.Forms.DialogResult [System.Windows.Forms] System.Windows.Forms.MessageBox::Show(string)

 pop

 ret

}

В результате вы получите программный код CIL, соответствующий следующему определению класса C#.

public class Program {

 static void Main(string[] args) {

  System.Windows.Forms.MessageBox.Show("CIL работает прекрасно!");

 }

}

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Модификация справочников

Из книги Базы данных: конспект лекций автора Автор неизвестен

Модификация справочников Этот этап важен для настройки и работы в «3D Suite Мебельный салон».При входе в программу в раскрывающемся списке Раздел выберите пункт Модификация справочников. После нажатия кнопки ОК откроется окно Модификация справочников (рис. 7.19). Рис. 7.19.


6. Модификация базовых отношений

Из книги Обработка баз данных на Visual Basic®.NET автора Мак-Манус Джеффри П

6. Модификация базовых отношений Для успешной и продуктивной работы с различными базовыми отношениями очень часто разработчикам необходимо каким-либо образом модифицировать это базовые отношения.Какие основные необходимые варианты модификации встречаются чаще всего


Модификация структуры таблицы с помощью предложения ALTER

Из книги Linux-сервер своими руками автора Колисниченко Денис Николаевич

Модификация структуры таблицы с помощью предложения ALTER С помощью предложения ALTER можно изменить определения полей в таблице. Например, чтобы добавить поле CustomerType в tblCustomer, используйте приведенную ниже команду SQL.ALTER TABLE tblCustomer ADD CustomerType intДля того чтобы удалить поле из базы


3.5. Удаление и модификация учетных записей

Из книги Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT автора Фролов Александр Вячеславович

3.5. Удаление и модификация учетных записей Для удаления пользователя можно воспользоваться командой userdel. Удалять учетные записи умеет и linuxconf. При удалении пользователя программа linuxconf спросит у вас, что делать с домашним каталогом удаляемого пользователя: удалить,


Модификация класса CMemFile

Из книги Лучшие программы для Windows автора Леонтьев Виталий Петрович

Модификация класса CMemFile Вы можете наследовать от класса CMemFile собственные классы. При этом вы можете реализовать свой механизм выделения памяти для файла, чтения и записи данных. Для этого в состав CMemFile входят виртуальные методы Alloc, Free, Realloc, Memcpy и GrowFile.Методы Alloc, Realloc и Free


Модификация программ

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Модификация программ СборкиБольшую часть программ мы с вами получаем в готовом виде. Впрочем, существуют как минимум две категории программ, где пересборка и модификация всячески приветствуются, если не авторами, то благодарными пользователями...Программы,


Установка размера файла, инициализация файла и разреженные файлы

Из книги Моделирование бизнес-процессов с BPwin 4.0 автора Маклаков Сергей Владимирович

Установка размера файла, инициализация файла и разреженные файлы Функция SetEndOfFile позволяет переустановить размер файла, используя текущее значение указателя файла для определения его размера. Возможно как расширение, так и усечение файла. В случае расширения файла


4.14.1. Расщепление и модификация модели

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

4.14.1. Расщепление и модификация модели 1.Измените свойства модели "Деятельность компании":Model Name: Предлагаемая модель компании;" Time Frame: TO-BE;Purpose: Документировать предлагаемые изменения бизнес-процессов компании.Переименуйте работу "Сборка и тестирование компьютеров"в


11.5.2. Модификация флага "закрыть при выполнении"

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

11.5.2. Модификация флага "закрыть при выполнении" Во время системного вызова exec() дескрипторы файлов обычно остаются открытыми для использования в новых программах. В некоторых случаях может потребоваться, чтобы файлы закрывались, когда вызывается exec(). Вместо закрытия их


25.4. Модификация базы данных

Из книги Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/FireBird/Yaffil автора Ковязин Алексей Николаевич

25.4. Модификация базы данных Предусмотрены две операции, которые модифицируют базу данных qdbm: добавление записей и удаление записей. Обновление записей производится с помощью той же функции, что и добавления


Модификация стандартной модели памяти

Из книги Программирование на языке Ruby автора Е.А. Роганов, Н.А. Роганова Е.А. Роганов, Н.А. Роганова

Модификация стандартной модели памяти Работая в некоторой стандартной модели памяти, программист может в той или иной мере модифицировать ее, применяя в объявлениях модификаторы near, far и huge. Правила интерпретации объявлений с модификаторами рассмотрены в разделе 3.3.3.4


2. Модификация и создание пользовательских классов

Из книги автора

2. Модификация и создание пользовательских классов Ruby является объектно-ориентированным языком программирования. Давайте рассмотрим особенности представления классов.Объекты и классыВ реальной жизни все объекты обладают индивидуальными свойствами. Но, введя