2011-08-11 12 views
3

私が知っているように、
.cソースはアセンブリに行きオブジェクトファイルに行き、オブジェクトファイルは次に互いに(そしてライブラリに)リンクし、私たちはosから実行できるアプリケーションを取得します。
しかし、オブジェクトファイルはどのように見えますか?
.asm以上の.exeのようですか?
オブジェクトファイル内の命令はどのように格納されますか?「mov add call」擬似コードまたはマシンの無意味なコードとして?(質問です)オブジェクトファイルの外観

+0

を。コードがコンパイルされたプロセッサは、オブジェクトファイルの内容を "理解する"ことができます。 – pmg

+0

オブジェクトファイルにはさまざまな種類があります。http://en.wikipedia.org/wiki/Object_file – miku

答えて

1

機械コードです。 gcc -Sを使用してアセンブリを取得し、gcc -cを使用してオブジェクトファイルを取得できます。

+0

オプションが表示されます。1)-Sコンパイルのみ。アセンブルまたはリンクしないでください。2)-cコンパイルしてアセンブルしますが、リンクしないでください。だから、コンパイルはasmへの.cを意味し、asembleはasjへのasmを意味しますか? – all

+0

また、-oは "オブジェクトファイル"ではなく、出力ファイル用です。オブジェクトまたは実行可能ファイルのいずれかになります。 – all

+0

私の悪い、今すぐ固定 –

2

オブジェクトファイルにはシンボル情報(通常はプロプライエタリ、コンパイラ/リンカに依存)と実行可能な未加工のコンパイル済みマシンコードがあります。 Linuxや他の多くのシステムで使用される

ELF(実行可能ファイルおよびリンク可能形式)はこのように書きます:

enter image description here

1

オブジェクトファイルのようなシンボリック情報とともに、コンパイラによってターゲット特定のプロセッサ用のマシンコードです実行時リンクコードが実行可能コードの(オブジェクトファイル内の)メモリ位置を見つけることができるように、ライブラリの場合は関数名を使用します。私がログインしている間

ああの@hexaは非常に良く答えを与えた:)

1

のようなオブジェクト・ファイルに関する情報を表示するLinuxシステム上のobjdumpはコマンドを試してみてください:マシンコードとして

objdump -D <filename.o> | more