Common Intermediate Language и системное программирование в Microsoft.Net. Макаров А.В - 42 стр.

UptoLike

объявить глобальную функцию, нам требуется специальный абстрактный
тип <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;