|
|
|
arcsupport |
|
|||
Опытный Профиль Группа: Участник Сообщений: 725 Регистрация: 24.10.2008 Репутация: нет Всего: 2 |
Как gcc заставить изменить стандартную заглушку на что-нибудь другое?
|
|||
|
||||
boostcoder |
|
|||
pattern`щик Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 2 Всего: 110 |
||||
|
||||
bsa |
|
|||
Эксперт Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 4 Всего: 196 |
boostcoder, думаю, речь идет о коде, который выводит на консоль: "This program cannot be run in DOS mode."
|
|||
|
||||
boostcoder |
|
|||
pattern`щик Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 2 Всего: 110 |
bsa, никогда не задумывался о том, что выводит это сообщение
arcsupport, а зачем? |
|||
|
||||
arcsupport |
|
|||
Опытный Профиль Группа: Участник Сообщений: 725 Регистрация: 24.10.2008 Репутация: нет Всего: 2 |
Решил написать очень маленькую intro.
|
|||
|
||||
EvilsInterrupt |
|
|||
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 |
|||
|
||||
bems |
|
||||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
-------------------- Обижено школьников: 8 |
||||
|
|||||
tzirechnoy |
|
||||||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
COM и EXE. По названию стандартных расшырений этих файлов. В .exe-файле первыми двумя символами, действительно, были и есть иницыалы Марка Збиковски -- однако никто его так не называл.
Какой эльф в середине 80-х? Впрочем, они и в последствии (при разработке PE) COFF взяли, слоупоки. Да и, в любом случае, DOS stub -- это про другое.
Ответом на этот вопрос была разработка формата файла, который мог выполняться и в MS DOS и в MS Windows. В рассчёте на программы, которые реально будут работать и в DOS и использовать все преимущества многозадачной системы Windows, при её наличии. Поскольку в файле так или иначе нужна была хоть какая-то DOS-программа -- в комплекте с компилятором поставлялась минимальная, она как раз и писала "This program cannot be run in DOS mode." Кстати, довольно типичным стабом в те времена был запуск windows, со своей программой. Из DOSа (в windows до 3.11 включительно такая возможность была). Добавлено через 56 секунд
Подозреваю, что написать .DEF, в котором, кроме прочего необходимого, вписать STUB 'mystub.exe' Кстати, это делает не gcc, а ld из binutils. |
||||||||
|
|||||||||
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | GNU toolchain | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |