Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PE stub 
:(
    Опции темы
arcsupport
Дата 20.12.2011, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: нет
Всего: 2



Как gcc заставить изменить стандартную заглушку на что-нибудь другое?
PM MAIL   Вверх
boostcoder
Дата 20.12.2011, 12:09 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 2
Всего: 110



Цитата(arcsupport @  20.12.2011,  09:55 Найти цитируемый пост)
стандартную заглушку

это что? оО
PM WWW   Вверх
bsa
Дата 20.12.2011, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 4
Всего: 196



boostcoder, думаю, речь идет о коде, который выводит на консоль: "This program cannot be run in DOS mode."
PM   Вверх
boostcoder
Дата 20.12.2011, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 2
Всего: 110



bsa, никогда не задумывался о том, что выводит это сообщение smile

arcsupport, а зачем?
PM WWW   Вверх
arcsupport
Дата 20.12.2011, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: нет
Всего: 2



Решил написать очень маленькую intro.
PM MAIL   Вверх
EvilsInterrupt
Дата 23.6.2012, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: нет
Всего: 9



В виду того что меня только что спросили подобный вопрос я решил порыться в нэте и на винграде, и наткнулся на эту тему. Поэтому отвечу тут и останется ответ для истории.

Когда-то давным давно существовал DOS и под него были два формата исполнимых файлов COM и MZ(Марк Збиковски). При первых шагах во время разработки первой Windows перед разработчиками из MS встал вопрос какой выбрать формат исполнимых файлов для новой ОС? Решено было разработать новый. Учитывая что на тот момент удачным форматом исполнимого файла на тот момент считался Elf было принято решение разработать нечто подобное. Однако встал вопрос : А что если новый Windows-исполнимый файл попытаются запустить на DOS? В те времена еще была очень даже распространена, это как сейчас уже есть Windows Seven x64, но существуют все еще "неандертальцы" использующие Windows XP. Возвращаясь к вопросу о запуске файла на DOS. Ответом на этот вопрос был решение о вставке минимальной DOS-программы в начало файла печатающее текст "This program cannot be run in DOS mode.". Такую программу принято называть "PE Stub".

В виду того что сейчас очень распространены Win XP и выше? необходимость наличия этой программы в современном исполнимом файле весьма сомнительна! Системный загрузчик современных Windows смотрит исключительно на самые первые 2 байта это IMAGE_DOS_HEADER.e_magic и на 4 байтА по смещению 0x3C от начала файла это IMAGE_DOS_HEADER.e_lfanew . Все! Больше ничего современному загрузчику от DOS-хидера не нужно!

Текущее положение дел:
Современные компиляторы от MS, Gcc, Intel, Delphi и ряд других все еще вставляют этот PE-Stub в produce-файл при компиляции. И врядли когда-либо будут его "выкусывать", а надо ли? Смысл?

Если человеку так уж этот PE-Stub мешает то ничто не мешает ему написать консольное приложение  самому это не так уж и сложно выкусывать этот PE-стаб. Достаточно  сразу же после DOS-хидера записать IMAGE_NT_HEADERS передвинуть поближе данные секции и поправив хидера dos и описателей секций. На этом все! Если пойти дальше, то можно сделать "совмещение IMAGE_DOS_HEADER и IMAGE_NT_HEADERS" но зачем? Чтобы лишний раз антивирус ругался?

Доп. сведения о PE:

Также следует заметить что формат исполнимых файлов под MS Windows именуемый Portable Executable на самом деле не только Windows-specific. Если посмотреть на EFI-спецификацию и откроете любой EFI-файл в Hex-редакторе, то вы увидете что EFI-файл подчиняется PE-формату.
Однако есть множество дополнений и множество новых констант и структур для этих EFI-файлов, но это уже другая тема. Скажу лишь что EFI-файл это "пе-шник".

Это сообщение отредактировал(а) EvilsInterrupt - 23.6.2012, 23:07
PM MAIL WWW ICQ Jabber   Вверх
bems
Дата 3.11.2012, 06:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Цитата(EvilsInterrupt @  23.6.2012,  23:07 Найти цитируемый пост)
ничто не мешает ему написать консольное приложение  самому это не так уж и сложно выкусывать этот PE-стаб
при чем тут консольное приложение?

Цитата(EvilsInterrupt @  23.6.2012,  23:07 Найти цитируемый пост)
 Достаточно  сразу же после DOS-хидера записать IMAGE_NT_HEADERS передвинуть поближе данные секции и поправив хидера dos и описателей секций
почему не нужно править все RVA, VA и file offsets?



--------------------
Обижено школьников: 8
PM MAIL   Вверх
tzirechnoy
Дата 6.11.2012, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 1
Всего: 16



Цитата
два формата исполнимых файлов COM и MZ(Марк Збиковски).


COM и EXE. По названию стандартных расшырений этих файлов. В .exe-файле первыми двумя символами, действительно, были и есть иницыалы Марка Збиковски -- однако никто его так не называл.

Цитата
Учитывая что на тот момент удачным форматом исполнимого файла на тот момент считался Elf


Какой эльф в середине 80-х? Впрочем, они и в последствии (при разработке PE) COFF взяли, слоупоки. Да и, в любом случае, DOS stub -- это про другое.

Цитата
Ответом на этот вопрос был решение о вставке минимальной DOS-программы в начало файла печатающее текст "This program cannot be run in DOS mode."


Ответом на этот вопрос была разработка формата файла, который мог выполняться и в MS DOS и в MS Windows. В рассчёте на программы, которые реально будут работать и в DOS и использовать все преимущества многозадачной системы Windows, при её наличии.

Поскольку в файле так или иначе нужна была хоть какая-то DOS-программа -- в комплекте с компилятором поставлялась минимальная, она как раз и писала "This  program cannot be run in DOS mode."

Кстати, довольно типичным стабом в те времена был запуск windows, со своей программой. Из DOSа (в windows до 3.11 включительно такая возможность была).

Добавлено через 56 секунд
Цитата
Как gcc заставить изменить стандартную заглушку на что-нибудь другое?


Подозреваю, что написать .DEF, в котором, кроме прочего необходимого, вписать 

STUB 'mystub.exe'

Кстати, это делает не gcc, а ld из binutils.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | GNU toolchain | Следующая тема »


 




[ Время генерации скрипта: 0.1433 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.