В начале файла располагается DOS-MZзаголовок. Он определен следующим образом:
typedef struct _IMAGE_DOS_HEADER < // DOS .EXE header
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
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_res2[10]; // Reserved words
LONG e_lfanew; // File address of new exe header
> IMAGE_DOS_HEADER
Все что нас интересует здесь — это только одно значение — e_lfanew. Это двойное слово является RVAи указывает на структуру IMAGE_NT_HEADERS.
Что такое исполняемый файл
Размер DOS-MZ заголовка составляет 80 байт.
Файловый заголовок
Файловый заголовок находиться в PE-файле сразу же после сигнатуры IMAGE_NT_SIGNATURE. В файле WINNT.Hона определена как 00004550H. Файловый заголовок содержит наиболее общую информацию о данном файле. В файле WINNT.H файловый заголовок определен следующим образом:
typedef struct _IMAGE_FILE_HEADER <
WORD Machine;
WORD NumberOfSections;
DWORD TimeDateStamp;
DWORD PointerToSymbolTable;
DWORD NumberOfSymbols;
WORD SizeOfOptionalHeader;
WORD Characteristics;
> IMAGE_FILE_HEADER;
Давайте рассмотрим по порядку данные поля.
WORDMachine;
Два байта содержащие платформу, для которой создавался данный PE-файл. Возможные значения приведены ниже.
#define IMAGE_FILE_MACHINE_UNKNOWN 0
#define IMAGE_FILE_MACHINE_I386 0x014c // Intel 386.
#define IMAGE_FILE_MACHINE_R3000 0x0162 // MIPS little-endian, 0x160 big-endian
#define IMAGE_FILE_MACHINE_R4000 0x0166 // MIPS little-endian
#define IMAGE_FILE_MACHINE_R10000 0x0168 // MIPS little-endian
#define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169 // MIPS little-endian WCE v2
#define IMAGE_FILE_MACHINE_ALPHA 0x0184 // Alpha_AXP
#define IMAGE_FILE_MACHINE_POWERPC 0x01F0 // IBM PowerPC Little-Endian
#define IMAGE_FILE_MACHINE_SH3 0x01a2 // SH3 little-endian
#define IMAGE_FILE_MACHINE_SH3E 0x01a4 // SH3E little-endian
#define IMAGE_FILE_MACHINE_SH4 0x01a6 // SH4 little-endian
#define IMAGE_FILE_MACHINE_ARM 0x01c0 // ARM Little-Endian
#define IMAGE_FILE_MACHINE_THUMB 0x01c2
#define IMAGE_FILE_MACHINE_IA64 0x0200 // Intel 64
#define IMAGE_FILE_MACHINE_MIPS16 0x0266 // MIPS
#define IMAGE_FILE_MACHINE_MIPSFPU 0x0366 // MIPS
#define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466 // MIPS
#define IMAGE_FILE_MACHINE_ALPHA64 0x0284 // ALPHA64
#define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64
#define IMAGE_FILE_MACHINE_CEF 0xC0EF
ОС Windows поддерживает только две архитектуры и все они — процессоров Intel– IA-32, IA-64. Исходя из этого, только два значения считаются корректными в PE-файле IMAGE_FILE_MACHINE_IA64 и IMAGE_FILE_MACHINE_I386. Если Вы подставите чего-либо другое, загрузчик откажется загружать данный файл. Да и то для 32х разрядных операционных систем (т.е. работающих с 32х разрядными процессорами) – значение единственное — IMAGE_FILE_MACHINE_I386. Очень интересно еще и то, что в официальной спецификации о некоторых значениях просто умалчивается, просто умалчивается и все!
py196 Формируем исполняемый файл из программы
WORD NumberOfSections;
Количество секций в PE-файле. Значение должно быть верным. Фактически означает число элементов в таблице секций.
DWORD TimeDateStamp;
Информация о времени, когда был собран данный PE-файл. Это значение равно количеству секунд прошедших с 1 января 1970 года до времени создания файла. В стандартной библиотеке Си есть замечательная функция gmtime, которая переводит время из секунд в удобочитаемый вид. Она берет указатель на DWORD – количество секунд и заполняет структуру tm, определенную в time.h. Эта структура выглядит следующим образом:
int tm_sec; /* Секунды */
int tm_min; /* Минуты */
int tm_hour; /* Часы (0—23) */
int tm_mday; /* День месяца (1—31) */
int tm_mon; /* Месяц (0—11) */
int tm_year; /* Год (минус 1900) */
int tm_wday; /* День недели (0—6; Sunday = 0) */
int tm_yday; /* День года (0—365) */
int tm_isdst; /* связано с переход на летнее время */
Чтобы узнать какой дате это число соответствует, используйте следующую функцию
void printTimeStamp(DWORD x)
struct tm* Time=gmtime((const long *)
X – значение поля TimeDateStamp. Чтобы использовать данную функцию необходимо подключить заголовочный файл time.h.
DWORD PointerToSymbolTable;
Указатель на COFF-таблицу символов PE-формата. Эту же информацию можно найти в элементе массива DataDirectoryс индексом IMAGE_DIRECTORY_ENTRY_DEBUG. Если Вы вдруг не знали, то отладочная информация нужна только для отладчика. Отсюда следует, что мы может размещать в этом поле любое значение.
DWORD NumberOfSymbols;
Количество символов в COFF-таблице символов. Может принимать любое значение.
WORD SizeOfOptionalHeader;
Размер опционального заголовка. Опциональный заголовок следует сразу же за файловым заголовком. Размер опционального заголовка зависит от массива DataDirectory, а именно от количества элементов в нем. Обычно в нем 16 элементов, но могут быть и неожиданности. Это поле проверяется загрузчиком и должно быть правильным.
WORD Characteristics;
Характеристики – это атрибуты специфичные для данного PE-файла. Поле Characteristics 16 битное поле и каждый установленный бит представляет из себя отдельный флаг. Знаете, я не ленив, и опишу все возможные флаги подробно. Конечно, большинство из них не используются в данное время, ведь PE-формат был создан в 1993 году. С этого времени много вещей стали не важны.
Но это информация общеобразовательная. Прочитайте, если Вы хотите быть более гибки в области операционных систем.
Определены следующие значения:
#define IMAGE_FILE_fS_STRIPPED 0x0001
В файле отсутствует информация о базовых поправках. Этот флаг не используется в исполняемых файлах. Вместо этого информация о базовых поправках храниться в каталоге, на который указывает элемент в массиве DataDirectory с индексом IMAGE_DIRECTORY_ENTRY_BASERELOC.
#define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002
Файл является исполняемым (т.е. не содержит нераспознанных внешних ссылок). Если файл является исполняемым, то он не является объектным файлом или библиотекой.
#define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004
В файле отсутствуют номера строк. Это значение не используется в исполняемых файлах.
#define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008
Локальные символы отсутствуют в файле. Это значение не используется в исполняемых файлах.
#define IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010
Этот флаг установлен, если операционная система ограничивает программу памятью, агрессивно сбрасывая данные приложения в страничный файл. Этот флаг устанавливается для приложений, которые большую часть своего времени ждут, лишь очень редко пробуждаясь.
#define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020
Флаг, чтобы приложение могла работать с объемом памяти больше 2 или 3 Гб (в зависимости от загрузочного параметра).
#define IMAGE_FILE_BYTES_REVERSED_LO 0x0080
и
#define IMAGE_FILE_BYTES_REVERSED_HI 0x8000
Эти флаги устанавливаются если порядок байт в конце файла, отличен от порядка байт для текущей архитектуры. Т.к. порядок байт в процессорах Intelодинаковый, то этот параметр в данное время не используется.
#define IMAGE_FILE_32BIT_MACHINE 0x0100
Этот флаг установлен, если предполагается, что машина 32- разрядная. Вероятно, если файл будет собран при помощи 64-разраного линкера, то этот флаг не будет установлен.
#define IMAGE_FILE_DEBUG_STRIPPED 0x0200
Отладочная информация отсутствует в файле. Этот параметр не используется для исполняемых файлов.
#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400
Этот флаг установлен, если приложение может не запуститься с переносного носителя, дискеты или CD-ROM. В этом случае ОС переносит данные исполняемый файл в файл подкачки и считывает его оттуда. Но этот флаг в данный момент избыточен, т.к. ОС сама переносит исполняемый файл в файл подкачки, если он находиться на подобном съемном носителе.
#define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800
Флаг установлен, если приложение может не запуститься по сети. Но этот флаг в данный момент избыточен, т.к. ОС сама переносит исполняемый файл в файл подкачки, если он находиться на общем сетевом ресурсе.
#define IMAGE_FILE_SYSTEM 0x1000
Этот флаг установлен, если данный файл является системным, подобно драйверу. В настоящее время не используется.
#define IMAGE_FILE_DLL 0x2000
Исполняемый файл
Исполняемый файл — набор инструкций, который заставляет компьютер выполнить определённую задачу [1] . В отличие от текстового файла, который рассчитан на чтение человеком, исполняемый файл рассчитан на чтение (и выполнение) процессором.
Под «инструкциями» традиционно понимается машинный код, который выполняется напрямую физическим процессором [2] . В некоторых случаях файл, содержащий инструкции сценария промежуточного языка программирования (например, байт-код), также может считаться исполняемым.
Источник: wiki2.org
Исполняемый файл программы имеет расширение
Исполняемые файлы: расширения, форматы. Переименованный файл с вирусом F-Secure. Сценарий удаления программы (InstallShield).
Командной строки (Cmd.exe) запускает файлы, которые не имеют расширений имени исполняемого файла. txt в командной строке может Filename.txt Запустите как программу, а не открывается в программе «Блокнот К примеру, exe — это исполняемые файлы, например, инсталляторы программ, rar и zip — Так, например, расширение psd имеют файлы, созданные в графическом редакторе Adobe Photoshop (впрочем, эта программа программа playclaw не запускается, при запуске выдает ошибку BEX Помогите пожалуйста с данным вопросом Исполняемые файлы имеют расширение:. В зависимости от того, в каком виде записана программа в исполняемом файле, выделяют две большие подгруппы файлов данного класса.
Приложения имеют расширения EXE и могут запускаться самостоятельно. Файл содержит пользовательские настройки на внешнем накопителе, которые позволяют программе запускаться одинаково на любом компьютере. Файл портативного приложения обычно имеет двойное расширение . Исполни?мый (исполня?емый) мо?дуль, исполнимый файл (англ. executable file) — файл, содержащий программу в виде, в котором COM (здесь и далее при использовании расширений файлов операционных система Не будем говорить о всевозможных расширениях, указывающих на исполняемые файлы, так как командный интерпретатор операционной системы — тоже своего рода программа, которая работает с файлами, имеющими Расширение exe — это исполняемый файл, любая установленная программа имеет это расширение. Некоторые пользователи встречались с ошибкой, когда при запуски приложение, на экране отображалось окно, где Когда загруженная программа получает управление, имеют место следующие условия: В Префиксе Программного сегмента по смещению 2C передается адрес среды. Форматы исполняемых файлов (сравнение).
Исполняемый файл программы имеет расширение
09.07.2014,06:14
Группа: Пользователи
Сообщений: 650
Регистрация: 01.03.2010
Репутация: 567
Исполняемый файл программы имеет расширение
09.07.2014,08:32
Группа: Администраторы
Сообщений: 2357
Регистрация: 23.06.2009
Репутация: ∞
09.07.2014,10:43
Группа: Пользователи
Сообщений: 651
Регистрация: 01.03.2010
Репутация: 567
09.07.2014,12:00
Группа: Администраторы
Сообщений: 2358
Регистрация: 23.06.2009
Репутация: ∞
09.07.2014,13:58
Группа: Пользователи
Сообщений: 652
Регистрация: 01.03.2010
Репутация: 567
09.07.2014,16:18
Группа: Администраторы
Сообщений: 2359
Регистрация: 23.06.2009
Репутация: ∞
09.07.2014,19:20
Группа: Пользователи
Сообщений: 37
Регистрация: 12.10.2013
Репутация: 10
09.07.2014,21:03
Группа: модераторы
Сообщений: 8775
Регистрация: 09.01.2008
Репутация: 999
« Предыдущая тема | Следующая тема »
Статистика форума
На форуме сообщений: 4308
Зарегистрировано пользователей: 2343
Последняя тема:программа канала россия hd
Приветствуем последнего зарегистрированного по имени ayka012
Последняя тема: Рекорд посещаемости форума — 763
Источник: titanchik.ru