Мне было интересно, есть ли способ настроить компилятор для компиляции моего кода в файл .bin, который имеет только 1 и 0, без шестнадцатеричного кода, как в файле .exe. Я хочу, чтобы код работал на процессоре, а не на операционной системе. Есть ли какие-либо настройки, чтобы установить это в версии Express?? Заранее спасибо.
Компиляция кода C в файл .bin в Visual Studio 2012 Express
Ответы (1)
В файле «.bin» нет ничего волшебного. Расширение обычно просто указывает на двоичный файл, но все файлы являются двоичными. Таким образом, вы можете создать файл «.bin», переименовав файл «.exe», который генерирует ваш компоновщик, в «.bin».
Я предполагаю, что вы не будете удовлетворены этим, поэтому я уточню немного дальше. Расширение файла «.exe» (по крайней мере, в Windows, что я предполагаю, поскольку вы добавили тег, относящийся к Visual Studio) подразумевает двоичный файл специального формата — Portable Executable или сокращенно PE. Это стандартная форма двоичного файла, используемая в операционных системах Windows, как для исполняемых файлов, так и для библиотек DLL.
Таким образом, PE-файл является двоичным (".bin") файлом, но неизвестный двоичный файл с расширением ".bin" обязательно не является PE-файлом. Вы могли бы взять какой-нибудь другой двоичный файл (например, изображение) и переименовать его, чтобы он имел расширение «.bin». Он просто содержит последовательность двоичных битов без определенного формата. Вы не сможете запустить файл, потому что он не в правильном, распознаваемом формате. Ему не хватает волшебного PE-заголовка, который делает его исполняемым. Есть причина, по которой системы сборки C по умолчанию выводят PE-файлы: это единственный тип файла, который будет вам полезен.
И, как говорит пользователь1167662 в своем comment, в шестнадцатеричном коде нет ничего волшебного. Код в двоичных файлах может быть представлен в либо шестнадцатеричном, либо в двоичном формате. В любом случае это одна и та же информация. Любой хороший текстовый редактор (по крайней мере, предназначенный для программистов) может открыть и отобразить содержимое файла, используя любое представление (или ASCII, или десятичное).
Я хочу, чтобы он был как можно ниже для оптимальной производительности.
В этом нет ничего «нижнего уровня», и вы, конечно, не получите оптимизированной производительности. PE-файлы уже содержат собственный машинный код, который работает непосредственно на вашем микропроцессоре. Он не интерпретируется, как управляемый код. Он содержит ряд инструкций на машинном языке вашего процессора. PE-файлы просто содержат дополнительный заголовок, который позволяет операционной системе их распознавать и запускать. Это не влияет на производительность.
Для сборки операционной системы.
Теперь это немного отличается. В частности, это будет намного сложнее, чем написать обычное приложение для Windows. Вам предстоит много работы, потому что вы не можете полагаться на то, что операционная система поможет вам. Вам нужно будет разобраться с базовым оборудованием, на которое вы ориентируетесь — руководство/руководство разработчика для вашего процессора будет очень полезным.
И вам нужно будет получить другую среду сборки. Visual Studio не принесет вам никакой пользы, если вы не создаете PE-файл в распознаваемом формате. В него также не включен компоновщик Microsoft C++, link.exe
. Компоновщик не поддерживает вывод «плоских» двоичных файлов (т. е. файлов с удаленным PE-заголовком). Вам понадобится другой компоновщик. Набор инструментов GCC может это сделать. Есть порт для Windows; он называется MinGW.
Я также рекомендую книгу по разработке операционных систем. Это слишком много, чтобы ответить на вопрос о переполнении стека. И в учебных целях я настоятельно рекомендую поиграть с архитектурой, отличной от Intel x86.
.exe
файлы содержат шестнадцатеричный код? Насколько я знаю, они не делают. Вы просматриваете.exe
с помощью шестнадцатеричной программы просмотра? - person Keith Thompson   schedule 23.04.2013