Syscall von Inline-asm in x86_64 Linux?
-
05-07-2019 - |
Frage
Warum ist dieser Druck Müll statt mein Programm anmutig des Verlassens? Ich benutze System ruft diese Art und Weise auf BSD, und ich frage mich, was würde ich es in Linux brauchen, um zu arbeiten.
int
main(int argc, char **argv)
{
__asm ("movq $1,%rax; movq $0,%rdi; syscall"); /* exit(0) ? */
return 0;
}
Danke.
Lösung
Warum dieser Druck Müll statt mein Programm anmutig des Verlassens?
CESA-2009-001 „, 1 Syscall Ausfahrt auf i386 aber schreiben auf x86_64" .
, was ich brauche, um es in Linux funktioniert
Mit dem syscall ordinals aus dem aktuellen unistd_64.h
Hope, das hilft!
Andere Tipps
Syscall 1 Ausgang auf i386 aber schreibt auf x86-64 glaube ich.
EDIT: dies scheint korrekt zu sein: Nach Angaben der Bahn, die scheint nicht zu viele Informationen über x86-64 Linux Anordnung zu haben scheint dies der erwartete Register Setup vor der syscall Anweisung zu sein.
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??