Чудех се дали има начин да настроя компилатора да компилира моя код в .bin файл, който има само 1 и 0, без шестнадесетичен код, както в .exe файл. Искам кодът да работи на процесора, а не на операционната система. Има ли някакви настройки, за да го зададете на това в изданието Express?? Благодаря предварително.
Компилиране на C код в .bin файл в Visual Studio 2012 Express
Отговори (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.
.exe
файловете съдържат шестнадесетичен? Доколкото знам, не го правят. Гледате ли.exe
с шестнадесетичен преглед? - person Keith Thompson   schedule 23.04.2013