Составители:
Рубрика:
объявить глобальную функцию, нам требуется специальный абстрактный
тип <Module>. Дело в том, что все глобальные функции и поля считаются
принадлежащими этому типу. Запись, описывающая этот тип, содержит
следующие интересующие нас поля:
short Name;
Это поле содержит индекс в куче строк, по которому хранится
имя типа («<Module>»).
short FieldList;
short MethodList;
Эти два поля содержат индексы в таблицах полей и методов, на-
чиная с которых расположены описатели полей и методов типа.
2.2.3.4. Таблица методов (Method – 0x06)
Таблица методов описывает методы, объявленные в сборке. Каждая
запись этой таблицы содержит информацию об одном методе, представ-
ленную в следующих полях:
long RVA;
RVA тела метода в исполняемом файле.
short Flags;
Набор флагов, задающих область видимости метода и другие его
атрибуты.
short Name;
Это поле содержит индекс в куче строк, по которому хранится
имя метода.
short Signature;
Индекс в куче двоичных данных, по которому расположена сиг-
натура метода.
short ParamList;
В этом поле хранится индекс в таблице описателей параметров
метода.
2.2.3.5. Таблица импортируемых сборок (AssemblyRef – 0x23)
Все импортируемые сборки должны быть перечислены в таблице им-
портируемых сборок. Каждая запись этой таблицы содержит следующие
поля:
short MajorVersion;
short MinorVersion;
short BuildNumber;
short RevisionNumber;
Эти четыре поля хранят информацию о версии импортируемой
сборки.
short Name;
Структура программных компонентов
71
short MajorVersion;
short MinorVersion;
short BuildNumber;
short RevisionNumber;
Эти четыре поля хранят информацию о версии сборки.
short Name;
Это поле содержит индекс в куче строк, по которому хранится
имя сборки («HelloWorld»).
2.2.3.2. Таблица модулей (Module – 0x00)
Таблица модулей содержит только одну запись, описывающую мо-
дуль. В этой записи существенными являются два поля:
short Name;
Это поле содержит индекс в куче строк, по которому хранится
имя модуля («HelloWorld.exe»).
short Mvid;
Это поле содержит индекс в куче GUID'ов, по которому хранит-
ся глобальный уникальный идентификатор модуля.
2.2.3.3. Таблица определенных в сборке типов (TypeDef – 0x02)
В этой таблице каждая запись соответствует одному типу, объявлен-
ному в сборке. В нашем учебном примере нет классов, но для того чтобы
70
CIL и системное программирование в Microsoft .NET
AssemblyRef Table – 0x23 mscorlib
HelloWorld
ReadLine
WriteLine
hello
<Module>
System.Console
HelloWorld.exe
Assembly Table – 0x20
MemberRef Table – 0x0A
Method Table – 0x06
TypeDef Table – 0x02
TypeRef Table – 0x01
Module Table – 0x00
Рис. 2.10. Распределение элементов метаданных учебного примера
по таблицам
70 CIL и системное программирование в Microsoft .NET Структура программных компонентов 71
объявить глобальную функцию, нам требуется специальный абстрактный
AssemblyRef Table – 0x23 mscorlib тип . Дело в том, что все глобальные функции и поля считаются
принадлежащими этому типу. Запись, описывающая этот тип, содержит
Assembly Table – 0x20 HelloWorld следующие интересующие нас поля:
short Name;
Это поле содержит индекс в куче строк, по которому хранится
MemberRef Table – 0x0A ReadLine WriteLine имя типа («»).
short FieldList;
Method Table – 0x06 hello short MethodList;
Эти два поля содержат индексы в таблицах полей и методов, на-
чиная с которых расположены описатели полей и методов типа.
TypeDef Table – 0x02
2.2.3.4. Таблица методов (Method – 0x06)
TypeRef Table – 0x01 System.Console Таблица методов описывает методы, объявленные в сборке. Каждая
запись этой таблицы содержит информацию об одном методе, представ-
Module Table – 0x00 HelloWorld.exe ленную в следующих полях:
long RVA;
RVA тела метода в исполняемом файле.
Рис. 2.10. Распределение элементов метаданных учебного примера short Flags;
по таблицам
Набор флагов, задающих область видимости метода и другие его
short MajorVersion; атрибуты.
short MinorVersion; short Name;
short BuildNumber; Это поле содержит индекс в куче строк, по которому хранится
short RevisionNumber; имя метода.
Эти четыре поля хранят информацию о версии сборки. short Signature;
short Name; Индекс в куче двоичных данных, по которому расположена сиг-
Это поле содержит индекс в куче строк, по которому хранится натура метода.
имя сборки («HelloWorld»). short ParamList;
В этом поле хранится индекс в таблице описателей параметров
2.2.3.2. Таблица модулей (Module – 0x00) метода.
Таблица модулей содержит только одну запись, описывающую мо-
дуль. В этой записи существенными являются два поля: 2.2.3.5. Таблица импортируемых сборок (AssemblyRef – 0x23)
short Name; Все импортируемые сборки должны быть перечислены в таблице им-
Это поле содержит индекс в куче строк, по которому хранится портируемых сборок. Каждая запись этой таблицы содержит следующие
имя модуля («HelloWorld.exe»). поля:
short Mvid; short MajorVersion;
Это поле содержит индекс в куче GUID'ов, по которому хранит- short MinorVersion;
ся глобальный уникальный идентификатор модуля. short BuildNumber;
short RevisionNumber;
2.2.3.3. Таблица определенных в сборке типов (TypeDef – 0x02) Эти четыре поля хранят информацию о версии импортируемой
В этой таблице каждая запись соответствует одному типу, объявлен- сборки.
ному в сборке. В нашем учебном примере нет классов, но для того чтобы short Name;
Страницы
- « первая
- ‹ предыдущая
- …
- 40
- 41
- 42
- 43
- 44
- …
- следующая ›
- последняя »
