Компиляция кода C в файл .bin в Visual Studio 2012 Express

Мне было интересно, есть ли способ настроить компилятор для компиляции моего кода в файл .bin, который имеет только 1 и 0, без шестнадцатеричного кода, как в файле .exe. Я хочу, чтобы код работал на процессоре, а не на операционной системе. Есть ли какие-либо настройки, чтобы установить это в версии Express?? Заранее спасибо.


person Garrett Ratliff    schedule 23.04.2013    source источник
comment
Ты кажешься сбитым с толку; hex - это просто еще одно представление двоичного кода. .exe — это файл, содержащий все двоичные файлы, необходимые для его запуска. Каково ваше намерение с вопросом, который вы задаете?   -  person user1167662    schedule 23.04.2013
comment
Для сборки операционной системы. Я хочу, чтобы он был как можно ниже для оптимальной производительности.   -  person Garrett Ratliff    schedule 23.04.2013
comment
На какой платформе вы хотите, чтобы это работало? Создание операционной системы — непростая задача, и я бы не стал начинать с ОС для обычного ПК, как вы, вероятно, имеете в виду. Возьмите это от человека, который был в том же положении, что и вы, задаваясь вопросом, как сделать простую операционную систему. Я многому научился, пытаясь выполнить ту же задачу, используя Raspberry Pi в качестве платформы, и это руководство: cl.cam.ac.uk/projects/raspberrypi/tutorials/os.   -  person user1167662    schedule 23.04.2013
comment
Спасибо за совет. Я некоторое время занимался C, C++, Java и хотел сделать простую ОС. Спасибо за ссылку.   -  person Garrett Ratliff    schedule 23.04.2013
comment
Рад, что смог помочь, надеюсь, вам понравится учебник так же, как и мне :) (PS, есть много действительно крутых вещей, которые вы можете сделать с raspberry pi, помимо этого урока, поскольку похоже, что вы заинтересованы в этом). вещи; вы бы не потратили деньги на покупку одного)   -  person user1167662    schedule 23.04.2013
comment
Что привело вас к выводу, что .exe файлы содержат шестнадцатеричный код? Насколько я знаю, они не делают. Вы просматриваете .exe с помощью шестнадцатеричной программы просмотра?   -  person Keith Thompson    schedule 23.04.2013


Ответы (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.

person Cody Gray    schedule 23.04.2013