プログラムを正常に終了する代わりに、これがガベージを出力するのはなぜですか? 私はこのように BSD でシステム コールを使用していますが、Linux で動作させるには何が必要なのだろうかと思います。
int
main(int argc, char **argv)
{
__asm ("movq $1,%rax; movq $0,%rdi; syscall"); /* exit(0) ? */
return 0;
}
ありがとう。
プログラムを正常に終了する代わりに、これがガベージを出力するのはなぜですか? 私はこのように BSD でシステム コールを使用していますが、Linux で動作させるには何が必要なのだろうかと思います。
int
main(int argc, char **argv)
{
__asm ("movq $1,%rax; movq $0,%rdi; syscall"); /* exit(0) ? */
return 0;
}
ありがとう。
プログラムを正常に終了する代わりに、これがガベージを出力するのはなぜですか?
CESA-2009-001によると、「Syscall 1 は i386 で終了しますが、x86_64 で書き込みます」。
Linuxで動作させるには何が必要ですか
現在のunistd_64.hの syscall 序数を使用します。
お役に立てれば!
Syscall 1 は i386 で終了しますが、x86-64 で書き込みます。
編集: これは不正確なようです: Web によると、x86-64 Linux アセンブリに関する情報があまりないようです。これは、syscall 命令の前に予想されるレジスタ設定のようです。
rax system call number
rbx arg0
rcx return address from syscall
rdx arg2
rsi arg3
rdi arg4
r8 arg5
r9 arg1 (expected by gcc in %rcx)
r10-r15 should be saved/restored by C code
rbp dito What is dito??