2012-03-31 5 views
1

は、私は次のようになりますexit.sと呼ばれる簡単なアセンブリコードのファイルを持っている:アセンブリコードをコンパイルすると、16進バイトコードが表示されます。

.text 
.globl _start 
_start: 
     xor %eax, %eax 
     mov %al, 1 
     xor %ebx, %ebx 

私はこれの進バイトコードを取得したいと思います。私はLinuxマシンでこれをどうやって行いますか?私はどんなコマンドを使用しますか?

答えて

4

使用gccはコードをプリントアウトするobjdump -dを使用し、その後、実行ファイルにコンパイルする:

gcc -c -o my_file.o my_file.s 
objdump -d my_file.o 
+0

私はそれが私はそのような/tmp/ccLqYN5a.o 'などのエラーの束取得のgccを使用してコンパイルしよう:関数' _startで ': (の.text +は0x0の): '_startの複数の定義' の/ usrを/ bin/ld:/usr/lib/debug/usr/lib/crt1.o(.debug_info):再配置0に無効なシンボルインデックスがあります。11' – Nosrettap

+0

編集したバージョンを試してください。 –

+0

ありがとうございました。 -cはどういう意味ですか? – Nosrettap

1

ここでの主なものは、あなたがバイナリエディタまたはビューアが必要です。あなたが見つけることができる無料のものがたくさんあります。

ファイルをアセンブルした後に、出力ファイルが作成されます。このファイルはELF形式であることが多く、ファイルの先頭のヘッダーに余分な情報が含まれています。あなたはoformatフラグを使用してアセンブリ命令が、何もない平らなバイナリファイルを作成するために、ldを伝えることができます。

$ld file.o -oformat binary 

次にあなたがバイナリエディタを使用して生成される実行可能ファイルを開く場合は、そのマシンコードが表示されますアセンブラが生成されました。

関連する問題