Составители:
Рубрика:
объявить глобальную функцию, нам требуется специальный абстрактный
тип <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
- …
- следующая ›
- последняя »