Форум программистов, компьютерный форум, киберфорум
Разработка и тестирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/67: Рейтинг темы: голосов - 67, средняя оценка - 4.93
Эксперт по электронике
7144 / 3323 / 342
Регистрация: 28.10.2011
Сообщений: 13,085
Записей в блоге: 7

Минимальный размер EXE файла PE формата.

15.05.2012, 19:47. Показов 14052. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне интересно с помощью какого компилятора ЯВУ можно создать исполняемый файл PE формата (Windows) минимальных размеров. Естественно без вырезания "лишнего" после компиляции или упаковки файла.
Пишите каков минимальный размер файла на выходе при компиляции проги с одной строкой, выводящей сообщение в MessageBox(). А лучше приложите к сообщению скомпилированную прогу.
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.05.2012, 19:47
Ответы с готовыми решениями:

Вычислить размер программы формата .EXE
Делаю это следующим образом: format MZ ;EXEпрограмма entry csg: begin ;адрес первой команды программы stack 256 ...

Размер скомпилированного EXE-файла
Простое Win32bit приложение в XE5 с кнопкой на форме после компиляции имеет размер 19,5 мб, в то время как Delphi7 компилит экзешник около...

Уменьшить размер .exe файла
Здравствуйте! Какими способами можно уменьшить .exe файл? В исходнике 470 строк. В данный момент весит 63*951 байт. Батник выглядит так: ...

29
Заблокирован
08.08.2014, 15:20
Студворк — интернет-сервис помощи студентам
locm,
Встроенный дизайнер форм появился в версии 5.10.
А в 10.10 может доберется до уровня дизайнера Delphi... До уровня дизайнера Delphi 7 - 2002 год...

функции, которых (если считать только кроссплатформенные) больше 1000.
Думается, меньше их, чем в Java и Qt... Или хоть не больше.
Пишут на Java, на Qt... А какой-то PureBasic...
0
Эксперт по электронике
7144 / 3323 / 342
Регистрация: 28.10.2011
Сообщений: 13,085
Записей в блоге: 7
08.08.2014, 15:38  [ТС]
Давайте не будем отклонятся от темы. Она называется Минимальный размер EXE файла PE формата.

Цитата Сообщение от Смолевич Посмотреть сообщение
Думается, меньше их, чем в Java и Qt... Или хоть не больше.
Пишут на Java, на Qt... А какой-то PureBasic...
Аргументируйте в контексте темы. Докажите что исполняемый файл на Java и Qt получается меньше чем на PureBasic.
Свою позицию я озвучил.
Цитата Сообщение от locm Посмотреть сообщение
ЯП выбирают под задачу и если нужен исполняемый файл с минимальным размером, то PureBasic в сравнении с другими ЯВУ, дает один из лучших результатов.
0
Заблокирован
08.08.2014, 15:51
Докажите что исполняемый файл на Java и Qt получается меньше чем на PureBasic.
Да я же их вообще не знаю... А на Java это вообще не исполняемый файл PE формата... Там все зависит еще от упаковщика... И Java не нативна...
0
1 / 1 / 0
Регистрация: 15.06.2018
Сообщений: 2
16.06.2018, 13:21
Урезал все что можно урезать и получил 269 байт.
DOS stub практически весь наложил на PE заголовок. Поле e_lfanew совпадает с SectionAlign. Пришлось еще и FileAlign = SectionAlign = 2 (т.к. FileAlign не может быть > SectionAlign)
Таблицу каталога сократил до 2-х элементов (экспорт и импорт).
Естественно все объединяется в одну секцию (.text)
Последнюю (нулевую) запись каталога импорта слил с названием функции MessageBox, так чтобы последние 4 байта = 0.
Assembler
1
2
3
4
 
import_:
dd 0,0,0,user32_dll,user32_table
 _MessageBox db "MessageBoxA",0,0,0,0,0
Строку названия user32.dll сократил до user32 и вписал в заголовок дескриптора секции (в поля PointerToRelocations и PointerToLinenumbers, т.к. релокации в программе не использую).
Assembler
1
user32_dll    db "user32",0,0
И наконец в качестве данных текста и заголовка сообщение использую MessageBoxA и user23.

Запакованный файл занимает больше места чем мой exe )
Вложения
Тип файла: zip msbox.zip (295 байт, 16 просмотров)
1
1 / 1 / 0
Регистрация: 15.06.2018
Сообщений: 2
16.06.2018, 13:49
PS.
В конце exe-файла 5 нулей, который относятся к последней нулевой записи импорта.
Их по идее можно сократить, но не все так просто. Как только их удаляю, программа не запускается
(даже если в заголовке меняю виртуальный и физический размеры секций).
Так и не смог разобраться почему загрузчику эта запись нужна именно в файла
(ведь при загрузке это место и так заполнится нулями).
Если кто знает подскажите...
0
Нарушитель
 Аватар для HACKER KAY
21 / 47 / 5
Регистрация: 03.06.2019
Сообщений: 368
Записей в блоге: 10
10.01.2023, 22:53
Написал прикола ради такой EXE на чистейшем ассемблере (использовал компилятор FASM)

Получился EXE файл в ровно 1 Килобайт (со сжатием около 350 Байт)

Выводит сообщение "Hello, World"

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
include 'win32a.inc'
 
PRT_BASE    =   $400000 ; 4 Mi
RVA_SHIFT   =   $1000   ; 4 Ki
 
format binary as "EXE"
use32
org 0
; *** MZ-Заголовок, заглушка (0,$60) ***
db  'MZ', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
 
; Исходные байты DOS-секции. Но какой дурак будет пытаться запустить этот файл в MS-DOS?! Перезаписываем нулями!
;db $0E,$1F         ; push cs // pop ds
;db $B4,9,$BA,$20,0 ; mov ah,9 // mov dx,$0020
;db $CD,$21         ; int $21
;db $B8,1,$4C       ; mov ax,$4C01
;db $CD,$21         ; int $21
 
db  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'DosX', 0, 0, 0, 0, 0, 0, 0, 0  ; Можно использовать это пространство как душе угодно, хоть целый роман написать
db  $60 ; здесь начинается сообщение DOS
db  0, 0, 0, 'Coded by DosX', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
 
; *** PE-Header ($60,$18 ) ***
db  'PE', 0, 0  ; Сигнатура PE
dw  $014C, 1    ; информация о кол-ве секций
dd  0, 0, 0
dw  $00E0, $010F, $010B ; Какие-то три байта. Они определённо делают что-то полезное
dw  0   ; Ненужный нам "linker version"
dd  0, 0, 0 ; Тоже ненужный .code/.idata/.data sizes
dd  $1000   ; Точка входа
dd  0, 0    ; Опять мусор, только на этот раз оффсеты .code/.data
dd  PRT_BASE    ; Адрес
dd  $1000, $0200    ; Выравнивание разделов в памяти и файле: 4КБ / 512Б
dd  1, 0, 4, 0  ; Требуемая ОС ( "NT 1.0" ) + Версия образа + Версия подсистемы + Разделитель
dd  ((($1000 +\ ; размер образа  = (rva + размер раздела) до $1000
XXIT_END-ENTRY_POINT) shr 12) + 1) shl 12
dd  $0200   ; (MS-DOG + PE + Optional + Sectional), оффсет
dd  0   ; Неиспользуемый раздел чексуммы ("checksum")
dw  2   ; "подсистема": 2 - GUI; 3 - Console
dw  0   ; Неиспользуемый раздел DLL
 
dd  $1000, $1000, $1000, 0  ; stack/heap reserve/commit
dd  0   ; Obsolete/reserved
dd  16  ; "directories" : 16 входов по 8 байт: 128 = $80 bytes
 
; *** Directories ($D8,$80) ***
dq  0   ; Неиспользуемый раздел экспортов ("exports")
dd  XXIT_BEGIN-PRT_BASE, XXIT_END-XXIT_BEGIN    ; Импорты  Wink
dq  14 dup(0)   ; 14 пустых входов
 
; *** Заголовок секций ($158,$28 ) ***
db  '.dosx',0,0,0   ; Название секции, 8 Bytes
dd  XXIT_END - ENTRY_POINT, RVA_SHIFT   ; Смещение rva
dd  PE_END - ENTRY_POINT    ; Выравнивание до $0200
dd  $0200, 0, 0, 0, $0E0000020  ; Задаём атрибуты: readable, writable, executable
db  ($0200-$) dup(0)    ; перейти к $0200/$1000
org $401000
 
; *** Главная секция ***
ENTRY_POINT:
    pushd 0 ; Айди стилизации месседжбокса. В данном случае это просто 0
    pushd TITLE_TEXT
    pushd MESSAGE_TEXT
    pushd 0 ; арг заглушка
    call  dword [MessageBox]
 
    pushd 0
    call  dword [ExitProcess]
 
MESSAGE_TEXT:   db  'Hello, World! :D', 0
TITLE_TEXT: db  '', 0
 
; *** Таблица импортов ***
XXIT_BEGIN:
dd  0, 0, 0, KERNEL_LIB - PRT_BASE, KERNEL_TABLE - PRT_BASE
dd  0, 0, 0, USER_LIB - PRT_BASE, USER_TABLE - PRT_BASE, 0, 0, 0, 0, 0
KERNEL_LIB: db 'kernel32.dll', 0
KERNEL_TABLE:
ExitProcess: dd _ExitProcess - PRT_BASE
dd 0
_ExitProcess: db 0, 0, 'ExitProcess', 0
USER_LIB: db 'user32.dll', 0
USER_TABLE:
MessageBox: dd _MessageBox - PRT_BASE
dd 0
_MessageBox: db 0, 0, 'MessageBoxA', 0
XXIT_END:
 
if ($ mod $0200) > 0
    db (($1FF)-($+$1FF) mod $0200) dup(0)
end if
 
PE_END:
 
; Вывод: Лучше бы я работал уборщиком ._.
Вложения
Тип файла: zip HELLO.zip (362 байт, 5 просмотров)
0
Нарушитель
 Аватар для HACKER KAY
21 / 47 / 5
Регистрация: 03.06.2019
Сообщений: 368
Записей в блоге: 10
10.01.2023, 23:05
P.S. Я не смог поменять смещение e_lfanew >:(
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
23.02.2023, 16:03
Ну, вот... Всё это конечно хорошо, только цель другая была.
Цитата Сообщение от locm Посмотреть сообщение
с помощью какого компилятора ЯВУ
0
Эксперт по электронике
7144 / 3323 / 342
Регистрация: 28.10.2011
Сообщений: 13,085
Записей в блоге: 7
23.02.2023, 16:36  [ТС]
Цитата Сообщение от HACKER KAY Посмотреть сообщение
Получился EXE файл в ровно 1 Килобайт
Килобайт можно и на ЯВУ получить.
0
Эксперт PHP
 Аватар для liris
5212 / 1169 / 163
Регистрация: 16.01.2023
Сообщений: 2,791
24.02.2023, 09:39
Есть интересная статья на Хабре, там на Си написали программу с гуем (графическим интерфейсом), которая уместилась в 1 килобайт (правда со сжатием, но зато с гуем):
https://habr.com/ru/post/416135/
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.02.2023, 09:39

Как уменьшить размер exe-файла?
Создал элементарную программку на lazarus. Прога -- только одна форма и одна кнопка, а exe весит 14 метров! Может кто подскажет почему, и...

Как уменьшить размер exe файла?
Всем привет, начал изучать c++ и меня очень смутило то, что exe файл даже простого hello world весит 542кб!? я просто не могу понять,...

Как уменьшить размер exe-файла?
Exe весит 10 мб. , не могу понять почему. Сначала думал что фоновые картинки и кнопки ( кнопками использую image для более приятного...

Как уменьшить размер EXE файла?
Люди, подскажите, пожалуйста, что можно отключить, чтобы скомпилённый экзешник стал немного поменьше размером?...

QFrame c QLabel минимальный размер + размер по содержимому
Здравствуйте. У меня есть QFrame, который выполнен в горизонтальной компоновке, в нем есть содержимое которое включает в себя QLabel....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru