コードを .bin ファイルにコンパイルするようにコンパイラを設定する方法があるかどうか疑問に思っていました。このファイルには 1 と 0 のみが含まれ、.exe ファイルのように 16 進コードはありません。オペレーティング システムではなく、プロセッサ上でコードを実行する必要があります。Expressエディションでそれに設定する設定はありますか?? 前もって感謝します。
1 に答える
「.bin」ファイルに魔法はありません。通常、拡張子はバイナリ ファイルを示すだけですが、すべてのファイルはバイナリ ファイルです。そのため、リンカーが生成する「.exe」ファイルの名前を「.bin」に変更することで、「.bin」ファイルを作成できます。
それだけでは満足できないと思いますので、もう少し詳しく説明します。「.exe」ファイル拡張子 (少なくとも Windows では、Visual Studio 関連のタグを追加したので、これを想定します) は、特殊な形式のバイナリ ファイル、つまりPortable Executable (略して PE) を意味します。これは、Windows オペレーティング システムで実行可能ファイルと DLL の両方に使用されるバイナリ ファイルの標準形式です。
したがって、PE ファイルはバイナリ (".bin") ファイルですが、拡張子が ".bin" の不明なバイナリ ファイルは、必ずしもPE ファイルとは限りません。他のバイナリ ファイル (画像など) を取得し、その名前を「.bin」拡張子に変更することもできます。特定の形式のバイナリ ビットのシーケンスが含まれているだけです。ファイルが正しく認識されている形式ではないため、ファイルを実行できません。実行可能にする魔法の PE ヘッダーがありません。C ビルド システムがデフォルトで PE ファイルを出力するのには理由があります。これは、使用する唯一のファイル タイプです。
そして、user1167662 が彼のコメントで言っているように、16 進コードについて魔法は何もありません。バイナリ ファイルのコードは、16 進数またはバイナリ形式で表すことができます。どちらでも同じ情報です。優れたテキスト エディター (少なくとも、プログラマー向けに設計されたもの) は、いずれかの表現 (または ASCII、または 10 進数) を使用してファイルの内容を開いて表示できます。
最適なパフォーマンスを得るために、できるだけ低レベルにしたいと考えています。
それについて「より低いレベル」は何もなく、最適化されたパフォーマンスは得られません。PE ファイルには、マイクロプロセッサで直接実行されるネイティブ マシン コードが既に含まれています。マネージ コードのように解釈されません。これには、プロセッサの機械語による一連の命令が含まれています。PE ファイルには、オペレーティング システムによる認識と実行を可能にする追加のヘッダーが含まれているだけです。これによるパフォーマンスへの影響はありません。
オペレーティング システムを構築します。
さて、それは少し違います… 特に、通常の Windows アプリケーションを作成するよりもはるかに困難になります。オペレーティング システムに頼って何かをしてもらうことはできないため、多くの作業が待ち構えています。対象となる基盤となるハードウェアについて詳しく調べる必要があります。CPU の開発者向けガイド/マニュアルは非常に役立ちます。
また、別のビルド環境を取得する必要があります。認識されている形式で PE ファイルを作成していない場合、Visual Studio は何の役にも立ちません。Microsoft の C++ リンカも含まれていませんlink.exe
。リンカーは、「フラットな」バイナリ ファイル (つまり、PE ヘッダーが取り除かれたもの) の出力をサポートしていません。別のリンカーが必要になります。GCC ツールセットはこれを行うことができます。Windows ポートがあります。それはMinGWと呼ばれます。
また、オペレーティング システム開発に関する本もお勧めします。スタック オーバーフローの質問への回答でカバーするには多すぎます。また、学習のために、Intel の x86 以外のアーキテクチャで遊ぶことを強くお勧めします。