
10 Форматы исполняемых файлов.pptx
- Количество слайдов: 8
ФОРМАТЫ ИСПОЛНЯЕМЫХ ФАЙЛОВ
КОМПИЛЯЦИЯ И СБОРКА ПРОГРАММ Обёртка Исходная программа Объектный файл Трансляция (компиляция) Сборка (линковка) #include <stdio. h> int main(){ int x[100]; } Исполняемый файл int func(){ int x[100]; } }} Библиотека функций Статическое и динамическое связывание?
Что такое исполняемый файл? Исполни мый (исполня емый) файл (англ. executable file) — это разновидность файла, содержимое которого является инструкциями для операционной системы каким образом необходимо создать новый процесс и что этот процесс должен содержать (что исполнять). Исполняемый файл содержит: • заголовок; • машинные инструкции; ELF = Executable and Linkable Format • статические данные; PE – Portable Executable • информацию о стеке; • информацию о куче; COFF, ECOFF, A. OUT, и т. д. EXE (MZ, NE, LX, PE), COM • и т. п.
Структура исполняемых файлов ELF и PE Структура ELF файла Структура PE(32) файла ELF заголовок Заголовок DOS Таблица описатель программы Программа «загушка» DOS Секция 1 PE заголовок …. Таблица секций Секция N Секция 1 Таблица заголовков секций …. Секция N Служебные заголовки Бинарные данные (исполняемые команды, данные и т. п. )
Заголовок исполняемого файла в ELF формате #include <elf. h> ‘x 7 F’, ’E’, ’L’, ’F’ typedef struct { unsigned char e_ident[EI_NIDENT]; /* Сигнатура и прочая информация */ Elf 32_Half e_type; /* Тип объектного файла */ Elf 32_Half e_machine; /* Аппаратная платформа (архитектура) */ Elf 32_Word e_version; /* Номер версии */ Elf 32_Addr e_entry; /* Адрес точки входа (стартовый адрес программы) */ Elf 32_Off e_phoff; /*Смещение от начала файла таблицы программных заголовков*/ Elf 32_Off e_shoff; /*Смещение от начала файла таблицы заголовков секций*/ Elf 32_Word e_flags; /*Флаги процессора (не используется в архитектуре x 86)*/ Elf 32_Half e_ehsize; /*Размер ELF-заголовка в байтах*/ Elf 32_Half e_phentsize; /*Размер записи в таблице программных заголовков*/ Elf 32_Half e_phnum; /*Количество записей в таблице программных заголовков*/ Elf 32_Half e_shentsize; /*Размер записи в таблице заголовков секций*/ Elf 32_Half e_shnum; /*Количество записей в таблице заголовков секций*/ Elf 32_Half e_shstrndx; /*Расположение сегмента, содержащего таблиц y стpок*/ } Elf 32_Ehdr; Утилита readelf ? ?
Заголовок исполняемого файла DOS #include <winnt. h> typedef struct _IMAGE_DOS_HEADER { MZ WORD e_magic; // Magic number WORD e_cblp; // Bytes on last page of file WORD e_cp; // Pages in file WORD e_crlc; // Relocations WORD e_cparhdr; // Size of header in paragraphs WORD e_minalloc; // Minimum extra paragraphs needed WORD e_maxalloc; // Maximum extra paragraphs needed WORD e_ss; // Initial (relative) SS value WORD e_sp; // Initial SP value WORD e_csum; // Checksum WORD e_ip; // Initial IP value УКАЗЫВАЕТ НА WORD e_cs; // Initial (relative) CS value ‘P’, ’E’, ’ ’ WORD e_lfarlc; // File address of relocation table WORD e_ovno; // Overlay number WORD e_res[4]; // Reserved words WORD e_oemid; // OEM identifier (for e_oeminfo) WORD e_oeminfo; // OEM information; e_oemid specific WORD e_res 2[10]; // Reserved words Утилита PEBrowse LONG e_lfanew; // File address of new exe header } IMAGE_DOS_HEADER;
Заголовки исполняемого файла WINDOWS #include <winnt. h> typedef struct _IMAGE_FILE_HEADER { WORD Machine; WORD Number. Of. Sections; DWORD Time. Date. Stamp; DWORD Pointer. To. Symbol. Table; DWORD Number. Of. Symbols; WORD Size. Of. Optional. Header; WORD Characteristics; } IMAGE_FILE_HEADER; typedef struct _IMAGE_OPTIONAL_HEADER {. . . DWORD Size. Of. Code; DWORD Size. Of. Initialized. Data; DWORD Size. Of. Uninitialized. Data; DWORD Address. Of. Entry. Point; DWORD Base. Of. Code; DWORD Base. Of. Data; . . . } IMAGE_OPTIONAL_HEADER 32;
Контрольные вопросы • что такое исполняемый файл? • все ли исполняемые файлы имеют одинаковую структуру? • могут ли использоваться сразу несколько форматов исполняемых файлов? • зачем в скрипте BASH в первой строке указывается «магическая» комбинация символов «#!» ? Как эти символы относятся к форматам исполняемых файлов? • можно ли сказать, что формат файла определяется расширением (суффиксом)? • Что такое секция в исполняемом файле? • Можно ли просмотрев исполняемый файл узнать сколько оперативной памяти нужно для его выполнения? • Зачем используется динамическое связывание? • Утилиты readelf и pebuilder. Зачем нужны?
10 Форматы исполняемых файлов.pptx