Почему в PE-файлах есть заглушка для MS-DOS? [закрытый]


В последних версиях PE-файлов есть заглушка, чтобы показать пользователям MS DOS предложение This program can not be run in DOS mode. Почему такое сообщение все еще существует, хотя оно тратит около 38 байт? Кто-нибудь еще использует MS-DOS?

4 4

4 ответа:

Он все еще там, потому что нет простого способа удалить его, не нарушая формат файла, и никто, кажется, не думает, что 38 байт на исполняемый файл стоит хлопот. Требования по выравниванию секций почти всегда "растрачивают" Много больше, чем это в любом случае.

Где-то кто-то все еще использует DOS. И, для проблем обратной совместимости, 38 байт все еще должны быть там. Даже если никто не использует DOS.

Вы были бы поражены, узнав, через сколько обручей код Windows перескакивает, чтобы оставаться обратно совместимым.

Когда был введен формат PE (1994 год, Windows NT 3.1), DOS все еще был очень популярен. Риск того, что Windows EXE будет запущен из DOS по ошибке, был очень реален. Поэтому им нужно было сделать Windows EXE внешне совместимым с загрузчиком DOS. Так что в таком сценарии программа будет что-то делать (то есть печатать сообщение и выходить) вместо случайного сбоя.

Очевидно, что каким-то образом изменить загрузчик DOS, чтобы распознать исполняемый файл Windows, не было вариантом. А там ... не было идентификатора "платформа/архитектура" в заголовке DOS exe, как в PE - не было встроенного механизма для последующего внедрения несовместимости. Кроме того, "это программа для Windows, пожалуйста, запустите под Windows" является гораздо более дружелюбным сообщением, что "эта программа не совместима с вашей системой".

Заглушка DOS также была частью более старого 16-битного формата Windows EXE ("NE "для"нового исполняемого файла"). Путь к заглушке был даже настраиваемым параметром компоновщика, так что создание "жирного двоичного файла" из возможна сортировка-биты Windows будут вашей программой для Windows, а заглушка DOS будет той же самой программой (то есть той же самой функциональностью) для DOS. АФАИК, очень немногие люди когда-либо пользовались этим преимуществом.

Хотя дисковая операционная система (DOS) в наши дни не используется, DOS-режим, который в основном является командной строкой (или консольным режимом), все еще существует и очень популярен. Под DOS-режимом, вероятно, подразумевается режим командной строки. Консольные приложения очень популярны и повсеместно используются esp в среде тестирования и разработки.