Форматы исполняемых файлов

Автор: Пользователь скрыл имя, 03 Октября 2011 в 21:21, реферат

Описание работы

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

Работа содержит 1 файл

FORMATS.DOC

— 507.50 Кб (Скачать)

  0034h 2 байта Число сегментов с ресурсами

Таблица 3 (продолжение)

Смещение Длина Значение

  0036h 1 байт Операционная система. Значения бит: 
  бит 0 — неизвестная операционная система; 
  бит 1 — OS/2; 
  бит 2 — Microsoft Windows 
  Остальные биты не используются

  0037h 1 байт Дополнительная информация об исполняемом файле 
  Значения бит: 
  0 — поддержка длинных имен файлов; 
  1 и 2 — для приложений Windows 2.x (не актуально); 
  3 — исполняемый файл содержит область быстрой загрузки  
  (gangload area или fastload area). Эта область представляет  
  собой набор сегментов и ресурсов, хранящихся в одном раз- 
  деле файла. В этом случае эти данные помещаются загруз- 
  чиком в память одной командой чтения, что ускоряет за- 
  грузку модуля

  0038h 2 байта Смещение в 128-байтовых секторах до начала области быст-  
  рой загрузки

  003ah 2 байта Длина в 128-байтовых секторах области быстрой загрузки

  003сh 2 байта Не используется

  003eh 2 байта Ожидаемая версия Windows (в которой программа будет нор- 
  мально функционировать)

Таблица 4. Назначение флагов поля 000ch Windows-заголовка файла NE-формата

Номер  Длина  Значение 
бита  поля, 
в слове бит

  0 1  Устанавливается в 1, если исполняемый файл имеет один сегмент  
  данных

  1 1  Устанавливается в 1, если исполняемый файл имеет несколько  
  сегментов данных

  2 1  Не используется

  3 1  Программа будет выполняться в защищенном режиме

  4–7 4  Не используется

  8–9 2  Используется OS/2

  10 1  Не используется

  11 1  Самозагружающееся приложение

  12 1  Не используется

  13 1 Во время компоновки была не фатальная ошибка

  14 1  Устанавливается для библиотек, загружаемых выше кадра EMS

  15 1  Устанавливается, если приложение использует библиотечные модули. 
  Если бит установлен в 1, то Windows вызывает процедуру ини- 
  циализации по адресу
cs:ip. Этот бит используется совместно  
  с битом 0. Если бит 0 равен 1, то регистр
ds содержит адрес  
  сегмента данных библиотеки, иначе
ds содержит адрес сегмента 
  данных приложения

За заголовком следуют таблицы (см. рис. 3), начальные адреса (точнее, относительные смещения) которых были указаны в различных полях заголовка. Это таблица сегментов, таблица ресурсов, таблицы резидентных и нерезидентных имен, таблица ссылок, таблица входов. Рассмотрим их.

Таблица сегментов

Таблица сегментов представляет собой совокупность записей, описывающих каждый сегмент исполняемого файла. Относительное смещение начала этой таблицы находится в поле заголовка 0022h. Но это значение можно игнорировать, так как загрузчик всегда считает, что таблица сегментов располагается сразу за заголовком NE-файла. Размер записи в таблице 8 байт. Поля записи содержат информацию о длине и типе сегмента, расположении сегмента в файле и некоторые другие его характеристики (табл. 5).

Таблица 5. Элемент таблицы сегментов

Смещение Длина, Значение 
 байт

0000h 2 Смещение в секторах к сегменту (от начала файла). Чтобы  
  понять, о каких секторах идет речь, см. описание поля 0032h  
  в Windows-заголовке файла NE-формата (табл. 3)

0002h 2 Длина сегмента (в байтах). Если 0, то размер сегмента равен  
  64 Кбайт

0004h 2 Флаги, характеризующие сегмент (табл. 6)

0006h 2 Определяет минимальный размер памяти для размещения  
  сегмента. Если 0, то минимальный размер сегмента равен  
  64 Кбайт

В табл. 6 представлены флаги, которые характеризуют сегмент NE-файла.

Таблица 6. Флаги, характеризующие сегмент

Номер  Назначение 
бита

0 Тип сегмента: 
 0 — сегмент кода; 
 1 — сегмент данных

1 Устанавливается, если память для сегмента выделяется загрузчиком

2 Устанавливается, если сегмент загружен

3 Не используется

4 0 — сегмент неперемещаемый (Fixed), то есть его нельзя перемещать в па- 
 мяти; 
 1 — сегмент перемещаемый (MovAble)

5 0 — сегмент не допускает совместного использования (NonShareAble) 
 1 — сегмент допускает совместное использование (ShareAble)

Таблица 6 (продолжение)

Номер  Назначение 
бита

6 0 — сегмент типа LoadOnCall (то есть загружается при обращении к сег- 
 менту); 
 1 — сегмент типа Preload (то есть должен быть загружен в память целиком  
 во время загрузки модуля)

7 0 — сегмент доступен для чтения и записи; 
 1 — сегмент типа ExecuteOnly (только для выполнения). Если это сегмент  
 данных (см. бит 1), то сегмент доступен только для чтения (ReadOnly)

8 1 — сегмент сразу за данными содержит информацию о размещении. Если  
 сегмент имеет объекты, значение которых зависит от адреса загрузки, то  
 за сегментом следует таблица настройки. Эта таблица содержит записи 
 размещения
, которые характеризуют каждый из таких объектов (см. также  
 конец данного раздела)

9 Используется OS/2

10–11 Не используется

12 1 — сегмент типа DiscardAble (при необходимости система может выгрузить  
 сегмент из памяти)

13–15 Не используется

Максимальное число сегментов, которое может содержать модуль, — 253. Это ограничение связано с полем в таблице входов (табл. 9), где адреса экспортируемых функций хранятся в виде логических адресов. В этих логических адресах для хранения сегментной составляющей используется всего один байт, в который заносится номер сегмента в соответствии с таблицей сегментов. Недостающие три сегмента (с номерами 0, 0feh и 0ffh) используются загрузчиком Windows специальным образом.

Таблица описания ресурсов

Таблица описания ресурсов определяет расположение и характеристики каждого ресурса в исполняемом файле. Сами ресурсы при этом содержатся в другом месте. Таблица описания ресурсов располагается сразу за таблицей сегментов. Значение смещения ее начала содержится в поле NE-заголовка  0024h. Почему эта таблица может представлять интерес? Первое, что приходит в голову, — использовать информацию о ресурсах для адаптации программ к определенным условиям функционирования (например русификация англоязычных программ). Конечно, для этой цели можно использовать другие специально предназначенные для этого средства, например редакторы ресурсов. Мы не будем рассматривать, как описывается в памяти каждый тип ресурса, это заняло бы достаточно много места. Рассмотрим только один из них. Таблица описания ресурсов имеет формат, приведенный в табл. 7.

Таблица 7. Содержимое таблицы описания ресурсов

Смещение Длина поля Назначение 
поля  
в записи

0 2 байта Размер сектора. Значение в этом поле должно быть равным  
  полю со смещением 0032h в Windows-заголовке файла  
  NE-формата (см. табл. 3)

(2-??)h ?? Массив секций переменной длины, каждая из которых описы- 
  вает ресурсы определенного типа для данного приложения  
  (табл. 8)

(??+1)h 2 байта Нулевое слово — обозначает конец массива со структурами,  
  описывающими типы ресурсов в исполняемом файле

(??+1)+1)h ?? Строки символов, ассоциируемые с именованными ресурсами  
  в данной таблице ресурсов. Каждое имя начинается с байта,  
  содержащего число символов в имени (табл. 9).

?? 1 байт Нулевой байт, обозначающий конец таблицы описания  
  ресурсов

В табл. 8 представлена структура описания ресурса.

Таблица 8. Структура описания ресурса

Смещение Длина поля Назначение 
поля  
в записи

0 2 байта Идентификатор ресурса — определяет тип ресурса. Старший  
  бит этого поля установлен, если ресурс заранее определен.  
  Возможные значения поля без учета этого старшего бита  
  приведены в табл. 9. Если старший бит поля сброшен, то  
  значение в этом поле представляет собой смещение имени  
  ресурса в массиве строк символов (смещение (??+1)+1)h  
  в табл. 7)

2 2 байта Количество ресурсов данного типа. Исходя из значения этого  
  поля, можно определить длину секции описания ресурсов  
  данного типа

4 4 байта 0

8 ?? Массив структур, содержащих дополнительные характери-  
  стики ресурсов данного типа. Количество этих структур   
  равно значению в поле со смещением +2 таблицы. Назна- 
  чение полей структур этого массива показано в табл. 10.

В табл. 9 представлены возможные идентификаторы ресурсов.

Таблица 9. Идентификаторы ресурсов

Идентификатор Тип ресурса

1 Курсор

2 Растровое изображение

3 Значок

Таблица 9 (продолжение)

Идентификатор Тип ресурса

4 Меню

5 Окно диалога, управляющая кнопка

6 Таблица строк

7 Каталог шрифтов

8 Шрифт

9 Клавиша быстрого вызова

0ah Данные пользователя

0bh Таблица ошибок

0ch Каталог курсоров

0eh Каталог значков

0fh Таблица имен

10h Информация о версии

В табл. 10 представлена структура с характеристиками ресурса определенного типа.

Таблица 10. Содержимое структуры с характеристиками ресурса

Смещение  Длина,  Назначение 
поля байт

0 2  Смещение в единицах (см. поле 0 табл. 7) от начала файла  
  до месторасположения ресурса

2 2  Размер ресурса в байтах

4 2 Флаги ресурса (табл. 11)

6 2  Если старший бит поля равен 1, то в нем содержится цело- 
  численный идентификатор ресурса. Иначе это поле содержит  
  смещение в байтах от начала таблицы ресурсов до символьной  
  строки с именем ресурса. Для полного понимания назначения  
  этого поля обратитесь к материалу урока 18, в котором  
  рассматриваются вопросы разработки приложений для Win- 
  dows, в том числе с использованием ресурсов. Здесь пока  
  отметим, что ресурсы в приложении для Windows могут   
  идентифицироваться как с помощью целочисленного значения,  
  так и с помощью своего имени, то есть символьной  
  строки

8 4 Не используется

В табл. 11 представлены флаги, характеризующие ресурс.

Таблица 11. Флаги, характеризующие ресурс

Номер бита Назначение

0–3 Не используется

4 Устанавливается в 1, если ресурс перемещаемый (MoveAble), сбрасывается  
 в 0, если ресурс неперемещаемый (Fixed)

Номер бита Назначение

5 Устанавливается, если ресурс разделяемый

6 Устанавливается в 1, если ресурс должен быть предварительно загружен  
 (PreLoad). Устанавливается в 0, если ресурс загружается по запросу

7–15 Не используется

Месторасположение конкретного ресурса в файле определяется значением в поле со смещением 0 структуры, содержащей характеристики ресурса определенного типа (см. табл. 10). Каждый тип ресурса описывается структурой определенного типа. Этот материал достаточно громоздок, поэтому мы для примера рассмотрим только структуры для описания самого простого ресурса — растрового изображения (табл. 12) — и чуть более сложного — ресурса значка (табл. 13). Структура ресурса растрового изображения аналогична структуре файла bmp-формата, за исключением заголовка в начале этого файла. Каждый ресурс типа растровое изображение имеет собственный экземпляр в массиве структур, описывающем типы ресурсов для данного приложения (см. поле 2–?? табл. 7).

Информация о работе Форматы исполняемых файлов