nasmでコンパイルしたサンプルアセンブリファイルがあります。
nasm -f elf syscall.asm
これにより、syscall.oファイルが生成されます。私はそれをldとリンクしようとします:
ld -o syscall syscall.o
ldコマンドは、次のエラーで失敗します。
ld: i386 architecture of input file `syscall.o' is incompatible with i386:x86-64 output
しかし、私がそうするなら
ld -o syscall syscall.o -melf_i386
コマンドは成功し、syscall実行可能ファイルを取得します。
nasmがx86-64形式のオブジェクトコードを生成していないことを確認し、syscall.asmファイルの先頭に「BITS64」ディレクティブを追加しました。
次に、nasmを使用してsyscall.asmをアセンブルしようとすると、次のエラーが発生しました。
error: elf output format does not support 64-bit code
私の端末で「file/usr / bin / nasm」を実行すると、次のようになるため、これは奇妙に思えます。
/usr/bin/nasm: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
私の64ビットFedoraCore11には最新バージョンのnasmがインストールされており、私のCPUはIntel Core 2DuoE7200です。
[編集]
私の質問は、nasmにi386:x86-64と互換性のあるオブジェクトファイルを出力させる方法です。