Всем привет, в этой статье разберём способ отключения стандартных библиотек в нашем проекте. Для начала запустим VS Studio, я использую Visual Studio 2022. После создадим пустой проект. Далее жмём ПКМ по названию проекта => свойства Настраиваем по порядку. ======================== Свойства => C++ => Оптимизация Оптимизация: Максимальная оптимизация (приоритет размера) (/O1) Развертывание подставляемых функций: Отключено (/Ob0) Включить подставляемые функции: Нет Предпочитать размер или скорость: Предпочитать краткость кода (/Os) Оптимизация всей программы: Да (/GL) ======================== ======================== Свойства => C++ => Создание кода Включить С++ исключения: Нет Библиотека времени выполнения: Многопоточная (/MT) Проверка безопасности: Отключить проверку безопасности (/GS-) ======================== ======================== Свойства => C++ => Язык Включить информацию о типах времени выполнения: Нет (/GR-) ======================== ======================== Свойства => C++ => Командная строка Дополнительные параметры: /Gw ======================== ======================== Свойства => Компоновщик => Общее Включить инкрементную компоновку: Нет (/INCREMENTAL:NO) ======================== ======================== Свойства => Компоновщик => Ввод Игнорировать все стандартные библиотеки: Да (/NODEFAULTLIB) ======================== ======================== Свойства => Компоновщик => Файл манифеста Создать манифест: Нет (/MANIFEST:NO) ======================== ======================== Свойства => Компоновщик => Отладка Создать отладочную информацию: Нет ======================== ======================== Свойства => Компоновщик => Дополнительно Точка входа: _EntryPoint ======================== ======================== Свойства => Компоновщик => Командная строка Дополнительные параметры: /EMITPOGOPHASEINFO ======================== Базовая настройка готова! Наша точка доступа теперь выглядит так: Вес файла равен 1.5кб, вместо 9кб. Настройка готова, давайте попробуем вывести текст в консоль. Сразу скажу, мы не сможем использовать стандартные функции по типу std::cout. Нам стоит заглянуть в документацию WinApi, и найти что-то там. Создадим указатель VOID, и напишем в нём код: VOID WriteLine(PCSTR szFormat, ...) { va_list arglist; va_start(arglist, szFormat); char Buffer[1024]; DWORD cbBuffer = wvsprintfA(Buffer, szFormat, arglist); if (cbBuffer) { WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), Buffer, cbBuffer, &cbBuffer, NULL); } } C VOID WriteLine(PCSTR szFormat, ...) { va_list arglist; va_start(arglist, szFormat); char Buffer[1024]; DWORD cbBuffer = wvsprintfA(Buffer, szFormat, arglist); if (cbBuffer) { WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), Buffer, cbBuffer, &cbBuffer, NULL); } } Возвращаемся в точку входа, и пишем WriteLine("Hello LZT!"); Компилируем код, и получаем результат: