Загрузка...
 
Печать

Двоичные ресурсы Windows-приложений




Структура исполняемого PE-модуля


Рис. 1 Структура PE-файла
Рис. 1 Структура PE-файла


Сокращение PE расшифровывается как Portable Executable (от англ. "переносной исполняемый"). Данный формат пришёл из UNIX, где аналогичный формат назывался COFF (Common Object File Format - Стандартный формат объектных файлов). Microsoft подвергла COFF-формат значительной переработке и в теперешнем виде исполняемые PE-файлы используются в среде Windows повсеместно. В группу PE-файлов входят:
  • Исполняемые файлы приложений Windows (.exe);
  • Динамически подсоединяемые библиотеки (Dynamic Link Library - DLL);
  • Объектные модули (obj);
  • Драйверы режима ядра.
Главной особенностью PE-модуля является простота его загрузки в память, для чего он не требует какой-либо дополнительной настройки. По сути, PE-модуль содержит слепок участка оперативной памяти. По своей структуре PE-файл чем-то напоминает слоёный пирог (см. Рис. 1). На Рис. 1 изображена общая схема PE-формата исполняемого модуля. В самом первом разделе (на рисунке он изображён сверху) разработчики отдали дань совместимости с операционной системой MS-DOS. Данный раздел давно ушёл в прошлое вместе с самой MS-DOS, но именно с него по сей день начинается любой исполняемый файл Win32. Два первых байта (MZ) - это т.н. сигнатура, которая подтверждает, что перед нами исполняемый модуль ОС MS-DOS.
Закрыть
noteЛюбопытный факт

Сокращение MZ - это инициалы сотрудника компании Microsoft Марка Збиковски (Mark Zbikowscki), разработчика структуры исполняемых модулей в ОС MS-DOS.

После сигнатуры MZ в PE-модуле идёт стандартный заголовок MS-DOS, а далее - маленькая программа-заглушка, которая обычно выводит на экран консоли сообщение: "This programm cannot be run in DOS mode." ("Эта программа не может выполняться в MS-DOS."), после чео заканчивает свою работу. Данный кусок кода часто называют stub (от англ. "заглушка").

Сразу после заголовков MZ и PE располагается таблица секций, состоящая из структур по 40 байтов каждая. Вот наиболее часто встречающиеся секции, генерируемые различными компиляторами1:
Секция Описание
.text Секция содержит исполняемый код (Microsoft).
CODE Секция содержит исполняемый код (Borland).
.data Секция, содержащая инициализированные глобальные переменные (Microsoft).
DATA Секция, содержащая инициализированные глобальные переменные (Borland).
.bss Все неинициализированные данные; размер секции в фале равен нулю.
.CRT Секция, содержащая инициализированные данные (Microsoft).
CRT Секция, содержащая инициализированные данные (Borland).
.rdata Данные доступны только для чтения (константы, отладочная информация).

По таблице секций можно вычислить положение секций в файле, её размер и, тем самым, получить возможность посмотреть, что в ней хранится.

Ресурсы исполняемых PE-файлов

Форматы исполняемых файлов, используемых в Windows, позволяют хранить внутри них особые типы данных - ресурсы.
К стандартные ресурсам Windows относятся:
  • Диалоговые окна (Dialog)
  • Значки (Icons)
  • Определения меню (Menu)
  • Определения панелей инструментов (Toolbar)
  • Растровые изображения (Bitmap)
  • Курсоры мыши (Cursor)
Кроме стандартных, программист может сам определить свои собственные ресурсы.
Помимо редактора ресурсов, MS Visual C++ также включает в себя встроенный язык описания ресурсов. Его директивы можно увидеть, если открыть в текстовом редакторе, предварительно созданный в MS Visual C++, шаблон ресурсов (фaйл с расширением .rc).
Ресурсы можно создавать двумя способами:
  • Описать ресурсы программы в текстовом ASCII файле с расширением RC. (Этот способ практически не используется).
  • Создать ресурс при помощи специализированного редактора ресурсов в режиме WYSIWYG (What You See Is What You Get – “что видишь, то и получаешь”).
В состав MS Visual C++ всех версий (кроме бесплатных редакций Express) входит редактор ресурсов, позволяющий визуально создавать и редактировать стандартные виды ресурсов. На самом деле это не один, а несколько редакторов (для каждого вида ресурсов), но в литературе их часто рассматривают как один. После компиляции Проекта все задействованные в нём ресурсы включаются в результирующий файл.
Существуют и другие редакторы ресурсов от сторонних производителей (ResEdit, PE-Editor, Resource Workshop и др.). Все они имеют схожий функционал и пользовательский интерфейс, не требующий много времени на освоение.

Создание Resource Script (файл описания ресурсов)

Напомним, что редакция Express MS Visual C++ (2005-2015) является облегченной версией, поэтому редактор ресурсов в ней просто отсутствует.


1. Пирогов В.Ю. "Ассемблер и дизассемблирование". - СПб.: БХВ-Петербург, 2006


Contributors to this page: slymentat .
Последнее изменение страницы Воскресенье 24 / Июль, 2016 09:06:45 MSK автор slymentat.

Помочь проекту

Яндекс-деньги: 410011791055108