Компилиране на 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) предполага двоичен файл със специален формат - Преносим изпълним файл или накратко PE. Това е стандартната форма на двоичен файл, използван в операционни системи Windows, както за изпълними файлове, така и за DLL файлове.

Така че PE файлът е двоичен (.bin) файл, но неизвестен двоичен файл с разширение „.bin“ не е задължително PE файл. Можеше да вземеш друг двоичен файл (като изображение) и да го преименуваш, за да има разширение ".bin". Той просто съдържа поредица от двоични битове без определен формат. Няма да можете да изпълните файла, защото не е в правилния, разпознат формат. Липсва му магическата PE заглавка, която го прави изпълним. Има причина C build системите да извеждат PE файлове по подразбиране: това е единственият тип файл, който ще ви бъде полезен.

И както user1167662 казва в своя коментар, няма нищо магическо в шестнадесетичния код. Кодът в двоичните файлове може да бъде представен в или шестнадесетичен или двоичен формат. Във всеки случай това е абсолютно същата информация. Всеки добър текстов редактор (поне този, предназначен за програмисти), може да отвори и покаже съдържанието на файл, използвайки или представяне (или ASCII, или десетичен).

Искам да е възможно най-ниско ниво за оптимална производителност.

В него няма нищо "по-ниско ниво" и със сигурност няма да получите оптимизирана производителност. PE файловете вече съдържат собствен машинен код, който работи директно на вашия микропроцесор. Не се интерпретира така, както би бил управляваният код. Той съдържа поредица от инструкции на машинния език на вашия процесор. PE файловете просто съдържат допълнителен хедър, който им позволява да бъдат разпознати и изпълнени от операционната система. Това няма ефект върху производителността.

За изграждане на операционна система.

Сега, това е малко по-различно По-специално, ще бъде много по-трудно от писането на обикновено приложение за Windows. Предстои ви много работа, защото не можете да разчитате на операционната система да направи нещо, за да ви помогне. Ще трябва да се захванете с основния хардуер, към който се насочвате – ръководство/ръководство за разработчици за вашия процесор ще бъде много полезно.

И ще трябва да получите различна среда за изграждане. Visual Studio няма да ви помогне, ако не създавате PE файл в разпознатия формат. Нито C++ линкерът на Microsoft е включен в него, link.exe. Линкерът не поддържа извеждане на "плоски" двоични файлове (т.е. такива с премахнат PE хедър). Ще ви трябва различен линкер. Наборът с инструменти на GCC може да направи това. Има Windows порт; нарича се MinGW.

Също така препоръчвам книга за разработка на операционна система. Това е твърде много, за да се покрие в отговор на въпрос за Stack Overflow. И за учебни цели аз силно препоръчвам да играете с архитектура, различна от x86 на Intel.

person Cody Gray    schedule 23.04.2013