Создайте программу на C размером 100 байт с помощью Visual Studio - PullRequest
0 голосов
/ 11 октября 2019

Я хочу написать прикладную программу на C, которая при сборке создаст исполняемый файл размером 100 байт или менее.

Даже если я создаю простую программу на C с пустым main(), мой выходной файл становится 11 КБ в Visual Studio 2015. Есть ли способ сказать VS не включать библиотеки по умолчанию, которые уменьшат мой исполняемый файлразмер. Или есть другой способ уменьшить размер исполняемого файла?

Ответы [ 2 ]

2 голосов
/ 11 октября 2019

Для вывода на консоль hello world можно создать исполняемый файл с текстовым разделом (т. Е. Разделом, в котором находится исполняемый код) менее 100 байт, но размер .EXE-файла будет больше, посколькуимеют правильную структуру формата PE, и этот формат требует небольшого дополнения. /NODEFAULT, конечно, даст вам ошибки. Затем вам придется переопределить то, чего не хватает, обычно делая вещи неактивными, и вам нужно будет использовать генерацию кода во время соединения, чтобы убрать все вызовы пустых функций (а также сами функции). Вам также нужно найти флаги компилятора, которые отключают все «классные» функции. Например, чтобы компилятор прекратил отправлять проверки безопасности буфера (__security_check_cookie и др.), Укажите опцию /GS-.

Возможно, вам понадобится специальный инструмент, чтобы полностьюудалите файл .EXE из ненужного PE Cruft, который испускает компоновщик VS. И ваш исполняемый файл по-прежнему будет связан по крайней мере с KERNEL32.DLL, поскольку без этого вы не сможете ничего полезного. Если вы храбры, вы можете напрямую использовать NTDLL.DLL (то есть собственный API), но для этого, вероятно, потребуется более 100 байт кода.

Ваш исполняемый файл также должен быть нацелен на 32-разрядную версию. архитектура;64-битная будет примерно на 25% больше (для таких небольших размеров сечений).

Это хороший вызов.

2 голосов
/ 11 октября 2019

Размер разумного исполняемого файла Win32 не может быть меньше нескольких сотен байт: Какой минимально возможный исполняемый файл Windows (PE)? Однако вы можете написать простой старый исполняемый файл COM, который может быть запущен только наx86-Windows. Вам понадобятся соответствующие наборы инструментов: Ищите 16-битный компилятор c для x86

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...