Domanda

Perché questa spazzatura stampa invece di uscire con garbo dal mio programma? Uso le chiamate di sistema in questo modo su BSD e mi chiedo di cosa avrei bisogno per farlo funzionare su Linux.

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

Grazie.

È stato utile?

Soluzione

  

Perché questa spazzatura stampa invece di uscire con garbo dal mio programma?

Per CESA-2009-001 , " Syscall 1 è esci su i386 ma scrivi su x86_64 " ;.

  

di cosa avrei bisogno per farlo funzionare su Linux

Usa gli ordinali di syscall dall'attuale unistd_64.h

Spero che questo aiuti!

Altri suggerimenti

Syscall 1 è uscita su i386 ma credo su x86-64 credo.

EDIT: questo sembra inaccurato: Secondo il Web, che non sembra avere troppe informazioni sull'assemblaggio Linux x86-64, questa sembra essere la configurazione del registro prevista prima dell'istruzione 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??
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top