は、私は次のようになりますexit.sと呼ばれる簡単なアセンブリコードのファイルを持っている:アセンブリコードをコンパイルすると、16進バイトコードが表示されます。
.text
.globl _start
_start:
xor %eax, %eax
mov %al, 1
xor %ebx, %ebx
私はこれの進バイトコードを取得したいと思います。私はLinuxマシンでこれをどうやって行いますか?私はどんなコマンドを使用しますか?
は、私は次のようになりますexit.sと呼ばれる簡単なアセンブリコードのファイルを持っている:アセンブリコードをコンパイルすると、16進バイトコードが表示されます。
.text
.globl _start
_start:
xor %eax, %eax
mov %al, 1
xor %ebx, %ebx
私はこれの進バイトコードを取得したいと思います。私はLinuxマシンでこれをどうやって行いますか?私はどんなコマンドを使用しますか?
使用gcc
はコードをプリントアウトするobjdump -d
を使用し、その後、実行ファイルにコンパイルする:
gcc -c -o my_file.o my_file.s
objdump -d my_file.o
ここでの主なものは、あなたがバイナリエディタまたはビューアが必要です。あなたが見つけることができる無料のものがたくさんあります。
ファイルをアセンブルした後に、出力ファイルが作成されます。このファイルはELF形式であることが多く、ファイルの先頭のヘッダーに余分な情報が含まれています。あなたはoformat
フラグを使用してアセンブリ命令が、何もない平らなバイナリファイルを作成するために、ld
を伝えることができます。
$ld file.o -oformat binary
次にあなたがバイナリエディタを使用して生成される実行可能ファイルを開く場合は、そのマシンコードが表示されますアセンブラが生成されました。
私はそれが私はそのような/tmp/ccLqYN5a.o 'などのエラーの束取得のgccを使用してコンパイルしよう:関数' _startで ': (の.text +は0x0の): '_startの複数の定義' の/ usrを/ bin/ld:/usr/lib/debug/usr/lib/crt1.o(.debug_info):再配置0に無効なシンボルインデックスがあります。11' – Nosrettap
編集したバージョンを試してください。 –
ありがとうございました。 -cはどういう意味ですか? – Nosrettap