質問

プログラムを正常に終了するのではなく、なぜこれがゴミを出力するのですか? BSDではこの方法でシステムコールを使用していますが、Linuxで機能させるには何が必要でしょうか。

int
main(int argc, char **argv)
{
    __asm ("movq $1,%rax; movq <*>,%rdi; syscall"); /* exit(0) ? */
    return 0;
}

ありがとう。

役に立ちましたか?

解決

  

プログラムを正常に終了する代わりに、なぜこれがゴミを出力するのですか?

CESA-2009-001 ごとに、&quot; Syscall 1はi386で終了するが、x86_64&quot;に書き込む。

  

Linuxで動作させるには何が必要ですか

現在の unistd_64.h

これがお役に立てば幸いです!

他のヒント

syscall 1はi386で終了しますが、x86-64で書き込みます。

編集:これは不正確なようです: x86-64 Linuxアセンブリに関する情報が多すぎるとは思われないWebによると、これは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??
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top