Взаимодействие с 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 работает прекрасно!");
}
}
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Установка размера файла, инициализация файла и разреженные файлы
Установка размера файла, инициализация файла и разреженные файлы Функция SetEndOfFile позволяет переустановить размер файла, используя текущее значение указателя файла для определения его размера. Возможно как расширение, так и усечение файла. В случае расширения файла
11.5.2. Модификация флага "закрыть при выполнении"
11.5.2. Модификация флага "закрыть при выполнении" Во время системного вызова exec() дескрипторы файлов обычно остаются открытыми для использования в новых программах. В некоторых случаях может потребоваться, чтобы файлы закрывались, когда вызывается exec(). Вместо закрытия их
25.4. Модификация базы данных
25.4. Модификация базы данных Предусмотрены две операции, которые модифицируют базу данных qdbm: добавление записей и удаление записей. Обновление записей производится с помощью той же функции, что и добавления
3.5. Удаление и модификация учетных записей
3.5. Удаление и модификация учетных записей Для удаления пользователя можно воспользоваться командой userdel. Удалять учетные записи умеет и linuxconf. При удалении пользователя программа linuxconf спросит у вас, что делать с домашним каталогом удаляемого пользователя: удалить,
2. Модификация и создание пользовательских классов
2. Модификация и создание пользовательских классов Ruby является объектно-ориентированным языком программирования. Давайте рассмотрим особенности представления классов.Объекты и классыВ реальной жизни все объекты обладают индивидуальными свойствами. Но, введя
Модификация структуры таблицы с помощью предложения ALTER
Модификация структуры таблицы с помощью предложения ALTER С помощью предложения ALTER можно изменить определения полей в таблице. Например, чтобы добавить поле CustomerType в tblCustomer, используйте приведенную ниже команду SQL.ALTER TABLE tblCustomer ADD CustomerType intДля того чтобы удалить поле из базы
Модификация программ
Модификация программ СборкиБольшую часть программ мы с вами получаем в готовом виде. Впрочем, существуют как минимум две категории программ, где пересборка и модификация всячески приветствуются, если не авторами, то благодарными пользователями...Программы,
6. Модификация базовых отношений
6. Модификация базовых отношений Для успешной и продуктивной работы с различными базовыми отношениями очень часто разработчикам необходимо каким-либо образом модифицировать это базовые отношения.Какие основные необходимые варианты модификации встречаются чаще всего
Модификация стандартной модели памяти
Модификация стандартной модели памяти Работая в некоторой стандартной модели памяти, программист может в той или иной мере модифицировать ее, применяя в объявлениях модификаторы near, far и huge. Правила интерпретации объявлений с модификаторами рассмотрены в разделе 3.3.3.4
4.14.1. Расщепление и модификация модели
4.14.1. Расщепление и модификация модели 1.Измените свойства модели "Деятельность компании":Model Name: Предлагаемая модель компании;" Time Frame: TO-BE;Purpose: Документировать предлагаемые изменения бизнес-процессов компании.Переименуйте работу "Сборка и тестирование компьютеров"в
Модификация справочников
Модификация справочников Этот этап важен для настройки и работы в «3D Suite Мебельный салон».При входе в программу в раскрывающемся списке Раздел выберите пункт Модификация справочников. После нажатия кнопки ОК откроется окно Модификация справочников (рис. 7.19). Рис. 7.19.
Модификация класса CMemFile
Модификация класса CMemFile Вы можете наследовать от класса CMemFile собственные классы. При этом вы можете реализовать свой механизм выделения памяти для файла, чтения и записи данных. Для этого в состав CMemFile входят виртуальные методы Alloc, Free, Realloc, Memcpy и GrowFile.Методы Alloc, Realloc и Free