Kali linux 64ビットを使用しており、PaulCarter博士のWebサイトから次のプログラムを実行しようとしています。 gccコマンドでエラーが発生しています。 gccコマンドで何を使用する必要がありますか?
nasm -f elf32 array1.asm
root@kali:Assembly# gcc -o array1 array1.o array1c.c
array1c.c:9:1: warning: ‘cdecl’ attribute ignored [-Wattributes]
array1c.c:10:1: warning: ‘cdecl’ attribute ignored [-Wattributes]
/usr/bin/ld: i386 architecture of input file `array1.o' is incompatible with i386:x86-64 output
collect2: error: ld returned 1 exit status
32ビットオブジェクトファイルをリンクしようとしていますi386
から64ビットの実行可能ファイル(i386:x86-64
)。追加 -m32
をgcc
コンパイル行に追加して、32ビットの実行可能ファイルを作成します。
nasm -f elf64 array1.asm
その後
ld -s -o array1 array1.o
最初にこれをインストールします:
Sudo apt-get install gcc-multilib g++-multilib
次に、Assemebleと次のようにリンクします。
nasm -f elf array1.asm -o array1.o
そして最後に、
gcc -m32 array1.o -o array1.out
実行し、
./array1.out
これはうまくいくはずです......
(おっと、私は質問をざっと読んだだけで、ld
だけでスタンドアロンの実行可能ファイルを作成していると思いました。libcなどとリンクしたい場合は、gcc -m32
に関するcadの回答を参照してください。スタンドアロンとして少し実験してみるよりも。)
ld
に出力の対象となるマシンを指定する必要があります。デフォルトはネイティブタイプです。
nasm -f elf32 array1.asm # or yasm
ld -m elf_i386 array1.o -o 32bit-array1
残念ながら、多くのasmガイド/リソースには、32ビットx86コードの例がまだあります。