Syscall da inline asm in x86_64 Linux?
-
05-07-2019 - |
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.
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??