x86_64 LinuxのインラインasmからのSyscall?
-
05-07-2019 - |
質問
プログラムを正常に終了するのではなく、なぜこれがゴミを出力するのですか? 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??
所属していません StackOverflow