Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АВМиС - бывшее АПЭВМ / apvem / всякаявсячина.doc
Скачиваний:
42
Добавлен:
15.09.2014
Размер:
670.72 Кб
Скачать

57.Разделы ехе файла

Любой образ ЕХЕ- или DLL-файласостоит из группыразделов(sections). По соглашению имя каждого стандартного раздела начинается с точки. С каждым разделом связана комбинация следующих атрибутов:

READ– разрешает чтение из раздела.WRITE– разрешает запись в раздел.EXECUTE– содержимое раздела можно исполнять.SHARED– раздел доступен нескольким экземплярам приложения.

Имя раздела

 

Описание

 

.text

 

Код приложения или DLL.

 

.bss

 

Неинициализированные данные.

 

.rdata

 

Неизменяемые данные периода выполнения.

 

.rsrc

 

Ресурсы.

 

.edata

 

Таблица экспортируемых имен.

 

.data

 

Инициализированные данные.

 

.xdata

 

Таблица для обработки исключений.

 

.idata

 

Таблица импортируемых имен.

 

.CRT

 

Неизменяемые данные стандартной библиотеки С.

 

.reloc

 

Настроечная информация — таблица переадресации (fixup table).

 

.debug

 

Отладочная информация.

 

.tls

 

Локальная память потока.

 

 

58. Проецируемые в память файлы

Как и виртуальная память, проецируемые файлы позволяют резервировать регион адресного пространства и передавать ему физическую память. Различие между этими меха­низмами состоит в том, что в последнем случае физическая память не выделяется из стра­ничного файла, а берется из файла, уже находящегося на диске. Как только файл спроеци рован в память, к нему можно обращаться так, будто он целиком в нее загружен.

Проецируемые файлы применяются для:

• загрузки и выполнения ЕХЕ и DLL файлов. Это позволяет существенно эконо­мить как на размере страничного файла, так и на времени, необходимом для под­готовки приложения к выполнению;

• доступа к файлу данных, размещенному на диске. Это позволяет обойтись без операций файлового ввода/вывода и буферизации его содержимого;

• разделения данных между несколькими процессами, выполняемыми на одной машине.

1. Отыскивает ЕХЕ-файл, указанный при вызове CreateProcess. Если файл не найден, новый процесс не создается, а функция возвращает NULL.

2. Создает новый объект ядра “процесс”.

3. Создает адресное пространство нового процесса (размером 4 Гб).

  1. Резервирует регион адресного пространства — такой, чтобы в него поместился заданный ЕХЕ-файл. Желательное расположение этого региона указывается внут­ри самого ЕХЕ-файла. По умолчанию базовый адрес ЕХЕ-файла — 0x00400000.

  2. Отмечает, что физическая память, увязанная с зарезервированным регионом, — ЕХЕ-файл на диске, а не страничный файл.

Спроецировав ЕХЕ-файл на адресное пространство процесса, система обращается к разделу ЕХЕ-файла со списком DLL-модулей, содержащих необходимые программе функции. После этого система поочередно загружает DLL-модули. Всякий раз, когда для заг­рузки DLL вызывается LoadLibrary, система выполняет действия, аналогичные описан­ным выше в пп. 4 и 5:

1. Резервирует регион адресного пространства — такой, чтобы в него мог помес­титься заданный DLL-файл. Желательное расположение этого региона указыва­ется внутри самого DLL-файла. По умолчанию DLL-модулям присваивается базовый адрес 0x10000000.

2. Если зарезервировать регион по желательному для DLL базовому адресу не удается (либо он слишком мал, либо занят каким-то еще ЕХЕ- или DLL-файлом), система пытается найти другой регион. Но такая ситуация весьма не­приятна. Во-первых, если в DLL нет настроечной информации, загрузка может вообще не получиться. Во-вторых, системе приходится выполнять модификацию адресов (relocation) внутри DLL. В Windows 95 эта операция осуществляется по мере подкачки страниц в оперативную память. Но в Windows NT на это уходит дополнительная физичес­кая память, выделяемая из страничного файла, да и загрузка такого DLL-модуля займет больше времени.

3. Отмечает, что физическая память, связанная с зарезервированным регионом, — DLL-файл на диске, а не страничный файл. Если Windows NT пришлось выпол­нять модификацию адресов из-за того, что DLL не удалось загрузить по желатель­ному базовому адресу, она запоминает, что часть физической памяти для DLL связана со страничным файлом.

После увязки ЕХЕ- и DLL-файлов с адресным пространством процесса начинает ис­полняться стартовый код ЕХЕ-файла