これはより小さな質問に分割する必要があるという templatetypedef のコメントには同意しますが、ここで質問のそれぞれについていくつかの指針を示すように努めます。
Windows オペレーティング システムを必要とせずに、このコンパイル済みプログラムを自分のマシンで直接実行できますか?
技術的には可能ですが、これには通常の起動手順の変更が必要です。これは、3 番目の質問に関連しています。Windows 自体は一種のアプリケーション ローダーであり、他のアプリケーションを起動する (そして他の便利なことを行う) ように設計されたアプリケーションです。現時点では、コンピュータが起動するときの最初の命令はJUMP
、コンピュータに OS のメモリ ロケーションに「ジャンプ」して初期化を開始するように指示する命令である可能性があります。それ以降、OS は比較的自己完結型になります。
.exe は、プログラムへのアセンブリ命令が組み込まれたコンパイル済みファイルですか?
.exe
ファイルは、実行可能ファイルの 1 つのタイプにすぎません。その他にはELF
、Mach-O
およびその他の全範囲が含まれます。.exe
ファイルは、次のデータがマシンで実行可能な命令 (1 と 0) の形式であることをマシンに伝える「ヘッダー」を除いて、他のファイルと同じです。アセンブリ言語と機械語命令を混同しないでください。のようなアセンブリ命令mov %eax, %ebx
は、マシンによって読み取られません。最初に を通過し、assmebler
1 と 0 に変換されます。
アセンブリ言語プログラムがバイトコードの場合、PIC バーナーで PIC を記録するときに、ヘキサコードを書き込むのはなぜですか?
上記のように。Bytecode
は多くの意味を持つ言葉です。16 進数は、2 進数を表す別の (短い) 方法です。一日の終わりには、すべてがバイナリに縮小されます。
x64 アーキテクチャは、新しい命令を備えた新しいアーキテクチャですが、x86 命令がまだ残っていますか? 正しいか間違っているか?
真実。インテルは、完全な下位互換性を維持するために最善を尽くしています。これは、オペレーティング システムには必ずしも当てはまりません。
コンパイラによって生成された低レベル コードを読み取るにはどうすればよいですか?
低レベルとは、1 と 0 ではなく、アセンブリ コードを意味していると思います。最も一般的な方法は、-S
のようなコンパイラでフラグを使用することgcc
です。これにより、オブジェクトまたは実行可能.s
ファイルの代わりにアセンブリ ファイルが出力されます。.o
.exe(etc)
アセンブリについて詳しく知りたい場合は、Intel プロセッサ ( ('x86') および) のGod Referenceを参照してください。非常に重いので注意してください。おそらく、Google で Windows または OS X のアセンブリ チュートリアルを探したほうがよいでしょう。NASMは無料のマルチプラットフォーム アセンブラです。ただし、他のアセンブラとは構文が少し異なります。ただし、これに着手する前に、コンピューター システムの基本 (プロセッサのしくみなど) を学習することをお勧めします。まず、DLX や MIPS などのより単純なアセンブリ言語を学習することをお勧めします。IA-32
x86-64