最近、Linuxでx86 64ビットアセンブリをいじっていましたが、一見単純なプログラムをコンパイルした後、頭を悩ませています:P
コンパイルしてリンクしても、エラーはスローされず、Linux ELF が生成されます。実行しようとすると、次のようになります。
.:[ h4unt3r@sp3ctr4l-h0st asm ]:.
#(0)> ./hello
bash: ./hello: No such file or directory
無効な ELF ファイルが生成されていると想定しているため、hello が存在するにもかかわらず存在しないと報告されます。理由はわかりません--おそらくこれで遊んでいきますが、これが簡単な方法で解決できるかどうか興味があります^_^
これが私のコンパイル/リンクコマンドラインです:
nasm -f elf64 hello.s -g
ld -o hello hello.o -lc
コードは次のとおりです。
section .data
msg: db "Hello, world!",0xa,0
section .text
extern printf
global main
main:
push rbp
mov rbp, rsp
mov rdi, msg
xor rax, rax
call printf
xor rax, rax
pop rbp
ret
編集 -- gcc は使いたくない :)