Уроки Iczelion'а




Урок 1. Обзор РE формата - часть 2


Hастоящее содержимое РE-файла разделено на блоки, называемые секциями. Секция - это ничто иное, как блок данных с общими атрибутами, такими как код/данные, чтение/запись и т.д. РE-файл можно сравнить с логическим диском. РE-заголовок - это загрузочный сектор, а секции - это файлы на диске. Файлы могут иметь различные атрибуты, такие как "только чтение", системный, спрятанный, архивный и т.п. Я хочу, чтобы было предельно ясно, что группирование данные производится на основе их атрибутов. Hе играет роли, как используются код/данные, если данные/код в РE-файле имеют одинаковые атрибуты, они могут быть сгруппированы в секцию. Вы не должны думать о секции как о "данных", "коде" или другой логической концепции: секции могут содержать и данные и код одновременно, главное, чтобы те имели одинаковые атрибуты. Если у вас есть данные, и вы хотите, чтобы они были доступны только для чтения, вы можете поместить эти данные в секцию, помеченную соответствующим атрибутом.

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

Поэтому мы можем рассматривать таблицу секций как корневую директорию логического диска. Каждый член массива является эквивалентом подкаталога корневой директории.

Вот и все об общей структуре РE-файла. Я кратко изложу основные шаги, выполняющиеся при загрузке РE-файла в память:

  • Когда РE-файл запускается, РE-загрузчик проверяет DOS MZ-заголовок, для того, чтобы определить смещение РE-заголовка. Если оно найдено, то загрузчик переходит к РE-заголовку.
  • РE-загрузчик проверяет, является ли РE-заголовок целым и неиспорченным. Если это так, то он переходит к концу РE-заголовка.
  • За ним незамедлительно следует таблица секций. РE-загрузчик считывает информацию о секциях и загружает эти секции в память. Также он устанавливает каждой секции атрибуты, указанные в таблице секций.
  • После того, как РE-файл загружен в память, РE-загрузчик обрабатывает логические части РE-файла, например таблицу импорта.

Вышеописанные шаги являются сильным упрощением и базируются на моих собственных наблюдениях. Возможно, есть какие-то погрешности, но я дал вам довольно ясную картину процесса.

Вам следует скачать описание РE-формата, сделанное LUEVELSMEYER'ом. Оно очень подробное и может послужить вам справочником.

[C] Iczelion, пер. Aquila.






Содержание  Назад  Вперед