Составители:
Рубрика:
Таблица 2.1. Описание макросов
Код функции align:
#include <stdlib.h>
unsigned long align(unsigned long x, unsigned long alignment)
{
div_t t = div(x,alignment);
return t.rem == 0 ? x : (t.quot+1)*alignment;
};
Структура программных компонентов
59
На основе блока входных параметров вычисляется расположение
секций в памяти. Вычисления осуществляются внутри набора макросов
(см. таблицу 2.1).
58
CIL и системное программирование в Microsoft .NET
Рис. 2.6. Схематичное расположение секций и заголовков
Секция релокации
Таблица секций
Дополнительный заголовок PE
Заголовок PE
Заголовок MS-DOS
Секция .cli
Таблицы для импорта mscoree.dll
Заголовок CLI
Секция .text
Тела методов
Метаданные
Точка входа (jmp _CorExeMain)
RVA
RVA_OF_TEXT
RVA_OF_CLI
RVA_OF_RELOC
Макрос:
RVA_OF_TEXT
Описание:
RVA секции «.text»
Подстановка:
align(sizeof(struct HEADERS), SECTION_ALIGNMENT)
Код функции align приведен в конце таблицы.
align – округляет первый аргумент в большую сторону до числа, кратно-
го значению SECTION_ALIGNMENT.
SECTION_ALIGNMENT – фиксированное выравнивание секций 0x2000
Макрос:
RVA_OF_CLI(params)
Описание:
RVA секции «.cli». Принимает в качестве аргумента блок входных пара-
метров (INPUT_PARAMETERS)
Подстановка:
RVA_OF_TEXT +
align(params->SizeOfMetadata, SECTION_ALIGNMENT)
Макрос:
RVA_OF_RELOC(params)
Описание:
RVA секции «.reloc». Принимает в качестве аргумента блок входных па-
раметров (INPUT_PARAMETERS)
Подстановка:
RVA_OF_CLI(params) + SIZEOF_CLI_M
В свою очередь макрос SIZEOF_CLI_M определен как:
align(sizeof(struct CLI_SECTION_IMAGE), SECTION_ALIGNMENT)
Формат и назначение структуры CLI_SECTION_IMAGE описан в 2.1.6.3.
58 CIL и системное программирование в Microsoft .NET Структура программных компонентов 59
Таблица 2.1. Описание макросов
Секция релокации
Макрос:
RVA_OF_TEXT
Секция .cli Описание:
RVA секции «.text»
Таблицы для импорта mscoree.dll Подстановка:
align(sizeof(struct HEADERS), SECTION_ALIGNMENT)
Код функции align приведен в конце таблицы.
Заголовок CLI
align – округляет первый аргумент в большую сторону до числа, кратно-
го значению SECTION_ALIGNMENT.
Точка входа (jmp _CorExeMain) SECTION_ALIGNMENT – фиксированное выравнивание секций 0x2000
Макрос:
Секция .text RVA_OF_CLI(params)
Описание:
Тела методов RVA секции «.cli». Принимает в качестве аргумента блок входных пара-
метров (INPUT_PARAMETERS)
Подстановка:
RVA_OF_RELOC
Метаданные
RVA_OF_TEXT +
align(params->SizeOfMetadata, SECTION_ALIGNMENT)
Таблица секций Макрос:
RVA_OF_CLI
RVA_OF_RELOC(params)
Дополнительный заголовок PE Описание:
RVA
RVA секции «.reloc». Принимает в качестве аргумента блок входных па-
раметров (INPUT_PARAMETERS)
Заголовок PE
RVA_OF_TEXT
Подстановка:
RVA_OF_CLI(params) + SIZEOF_CLI_M
Заголовок MS-DOS В свою очередь макрос SIZEOF_CLI_M определен как:
align(sizeof(struct CLI_SECTION_IMAGE), SECTION_ALIGNMENT)
Рис. 2.6. Схематичное расположение секций и заголовков Формат и назначение структуры CLI_SECTION_IMAGE описан в 2.1.6.3.
На основе блока входных параметров вычисляется расположение Код функции align:
секций в памяти. Вычисления осуществляются внутри набора макросов #include
(см. таблицу 2.1). unsigned long align(unsigned long x, unsigned long alignment)
{
div_t t = div(x,alignment);
return t.rem == 0 ? x : (t.quot+1)*alignment;
};
Страницы
- « первая
- ‹ предыдущая
- …
- 34
- 35
- 36
- 37
- 38
- …
- следующая ›
- последняя »
