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.

War es hilfreich?

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??
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top