singlepost

Ограничение размера для исполняемых файлов << На главную или назад  

Основной вопрос - кто нибудь когда-нибудь видел работающий исполняемый файл размера больше 4 Гб?

У меня подозрение, что в винде существует тупое ограничение на размер EXE-файла, равное 4 Гб. Я создаю exe-файл размером 4400 Мб (ну это типа инсталлятор), но при запуске он выдает только "программа не является приложением Win32". Код, создающий экзешник, вроде как отлаженный, и создаваемые файлы меньшего размера рабочие (3 Гб exe-файл работает). В различной документации про ограничение на размер exe не нашел.
Чтобы было ясно - я не собираюсь запихнуть в адресное пространство четыре с половиной гига, собственно программа (image) занимает очень немного, то есть большая часть экзешника является оверлеем, который по идее не должен проецироваться в память загрузчиком.

Кроме ограничения, остается вариант, что для большого размера поля PE-заголовков надо заполнять как-то по особому. Может кто что-нибудь знает по этому поводу, в спецификации PE ничего хорошего не нашел.
Спасибо за внимание.

P.S. Пока писал, пришла мысль проверить с WinRar'ом, создал SFX-архив больше 4 Гб, тоже не работает, но WinRar даже не дает предупреждения, что работать не будет :)

53 ответов в теме “Ограничение размера для исполняемых файлов”

Страницы: [1] 2 3 »

  1. 1
    Евгений Тихонов ответил:

    А чо за неведомая ***ная **ня на 4 гига? Не проще ли как все цивилизованные люди делают – инсталятор на 500 килобайт, а файлы распаковываемые на 4-5 гигов?

  2. 2
    Александр Lert ответил:

    Ну, иногда удобнее чтобы все было в одном файле, к примеру, когда скачивают файл с инета, одной ссылкой. Вопрос ведь не об этом. Понятно, что если не получится, сделаю как цивилизованные люди делают )

  3. 3
    Евгений Тихонов ответил:

    Ога, удобнее.. Я ***дь полтора часа ждал, пока е**ная контра сурс установится из такого вот огромного EXE, а если его антивирусник начнёт шерстить? Это ш пипец… К слово о контре – я со стима за 15 минут выкачиваю и она работает, а двухтонный экзешник полтора часа ставился, как я уже сказал.

    Экзешник же прямиком в оперативку уходит, так? А если система 32х битная, то наверное поэтому больше 4х гигов и не получается, если пейджфайл отключен и прочее

  4. 4
    Евгений Тюкавкин ответил:

    Может на 64битной системе будет работать… особенно если памяти больше 4гб будет :)
    Для скачивания все можно в архив помещать, zip винда давно поддерживать научилась.

  5. 5
    Антон Щиров ответил:

    > Ну, иногда удобнее чтобы все было в одном файле, к примеру, когда скачивают файл с инета, одной ссылкой
    Все это сливать zip'om (без сжатия!) в один файл

    А вот, что говорит по этому поводу Рихтер
    ==================
    При вызове из потока функции CreateProcess система действует так:
    1. Отыскивает ЕХЕ-файл, указанный при вызове CreateProcess. Если файл не найден, новый процесс не создастся, а функция возвращает FALSE.
    2. Создает новый объект ядра «процесс»
    3. Создает адресное пространство нового процесса
    4. Резервирует регион адресного пространства — такой, чтобы в него поместил ся данный ЕХЕ-файл Желательное расположение этого региона указывается внут ри самого ЕХЕ-файла По умолчанию базовый адрес ЕХЕ-файла — 0×00400000 (в 64-разрядном приложении под управлением 64-разрядпой Windows 2000 этот адрес может быть другим). При создании исполняемого файла приложе ния базовый адрес может быть изменен через параметр компоновщика /BASE.
    5. Отмечает, что физическая память, связанная с зарезервированным регионом, — ЕХЕ-файл на диске, а нс страничный файл.

    Спроецировав ЕХЕ-файл на адресное пространство процесса, система обращает ся к разделу ЕХЕ-файла со списком DLL, содержащих необходимые программе функции. После этого система, вызывая LoadLibrary, поочередно загружает указанные (а при необходимости и дополнительные) DLL-модули. Всякий раз, когда для загрузки DLL вызывается LoadLibrary, система выполняет действия, аналогичные описанным выще в пп. 4 и 5:
    ==================

  6. 6
    Александр Lert ответил:

    2 Евгений сферический в вакууме Тихонов:
    Про удобство. Да я все понимаю ) Я не собираюсь выкладывать здоровый файл в инет, чтобы кто-то его качал. Есть достаточно конкретная задача, и я утверждаю, что в моих обстоятествах один exe огромного размера удобнее других вариантов.
    Огромный exe может запускаться долго, если он с сертификатом. Тогда естественно перед запуском винда долго считает его хеш, чтобы проверить цифровую подпись. В моем случае подписей не будет )

    В оперативку экзешник прямиком не уходит, если он правильно сделан. То есть в адресное пространство проецируются только те части файла, которые относятся к секциям, а остаток файла (оверлей) не загружается, его будет грузить сам экзешник из себя с помощью обычного ввода-вывода. Проблема в том, что до него управление не доходит совсем, система отказывается запускать файл.

  7. 7
    Александр Lert ответил:

    2 Антон Щиров:
    Я в курсе, что говорил Рихтер )
    То что файл не грузится в память целиком, легко доказать тем, что 3 Гб экзешник запускается и работает, а пользовательская часть адресного пространства составляет, как известно 2 Гб. И работает все очень быстро.

    И все же, видел кто-нибудь файл или нет?! :)

  8. 8
    Евгений Тюкавкин ответил:

    Может просто система тупит от таких размерах на этапах загрузки и не может понять, чего куда и сколько грузить. Если размер ровно 4гб или на байт меньше, то работает или нет?

  9. 9
    Александр Lert ответил:

    Этого я не проверял… я 4 Гб как границу определил приближенно, только по тем цифрам, которые в первом посте ) Может завтра проверю.
    А система – ну возможно тупит, это как бы и выясняю ) тогда все понятно. Единственно странно, что WinRar как бы не колеблясь создает неработающий файл, и ничего не предупреждает. Помнится, где-то читал, что в какой-то новой его версии убрано ограничение на размер SFX архивов 4 Гб. Что толку тогда с этого новшества.
    Правда, может ограничение появилось только в висте (забыл сказать про нее), а раньше не было.

  10. 10
    Константин Смотритель ответил:

    Результат dumpbin в студию.

Страницы: [1] 2 3 »

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.