Os Xでは、作成したCプログラムをgcc -o binaryoutName inputfile
でコンパイルし、結果のバイナリ "Exec"ファイルに対して16進ダンプを実行しました。私が理解しているように、ExecファイルはUNIXの実行可能ファイルです。これは、実行可能ファイルのUNIXに相当します。UNIX Executableファイル 'Exec'、アセンブリではなくCコードを示しています
私はコマンドxxd -b binary
を使用して進ダンプを実行したとき、それはしかし、このASCIIは私が最初に.CファイルをプログラムリテラルのCコードを表し、バイナリのASCIIコンテンツを返さ
進ダンプエキス。:
0007c4a: 01101100 01110101 01110011 01101000 00000000 01011111 lush._ 0007c50: 01100110 01101111 01110000 01100101 01101110 00000000 fopen. 0007c56: 01011111 01100110 01110000 01110010 01101001 01101110 _fprin 0007c5c: 01110100 01100110 00000000 01011111 01100111 01100101 tf._ge 0007c62: 01110100 01100011 01101000 01100001 01110010 00000000 tchar. 0007c68: 01011111 01100111 01100101 01110100 01100011 01110111 _getcw 0007c6e: 01100100 00000000 01011111 01100111 01100101 01110100 d._get 0007c74: 01100101 01101110 01110110 00000000 01011111 01101100 env._l 0007c7a: 01101111 01100011 01100001 01101100 01110100 01101001 ocalti 0007c80: 01101101 01100101 00000000 01011111 01101101 01100101 me._me 0007c86: 01101101 01100011 01110000 01111001 00000000 01011111 mcpy._ 0007c8c: 01110000 01110010 01101001 01101110 01110100 01100110 printf 0007c92: 00000000 01011111 01110000 01110101 01110100 01100011 ._putc 0007c98: 01101000 01100001 01110010 00000000 01011111 01110011 har._s 0007c9e: 01100011 01100001 01101110 01100110 00000000 01011111 canf._ 0007ca4: 01110011 01101100 01100101 01100101 01110000 00000000 sleep.
右端の列のASCII変換は、私が最初にコンパイルされた.cファイル内のコードに非常に似ていることに注意してください。 これは、コンパイラが論理的にもコンパイルするアセンブラコードのASCIIバイナリを16進ダンプに含めることを期待していたため、直感的でした。
これはコンパイルプロセスの理解の極限にある質問であり、私はいくつかの間違った詳細があることを期待しています。
私の質問:なぜ、16進ダンプがアセンブリの代わりにCコードのASCIIを返すのですか?
ありがとうございました。
あなたがプログラムと正確な出力のサンプルをコンパイルする方法私たちを示していない場合はどのように我々はおそらく言うことができますか?おそらく、いくつかのコマンドを間違って実行しているかもしれません。実際のデータを表示しない限り、何も確認できません。 – kaylum
あなたはどのように 'gcc'を呼び出しましたか? – Serge
コマンドは 'gcc -o BinaryOuputfile FilenameInput'でした。コンパイル時にコマンドの構文が正しいので、質問を書くときに間違いました。現在、16進ダンプ抽出が含まれています。 – user4493605