Appel système depuis asline intégré sous x86_64 Linux?
-
05-07-2019 - |
Question
Pourquoi cela imprime-t-il des déchets au lieu de quitter mon programme normalement? J'utilise les appels système de cette manière sur BSD et je me demande de quoi aurais-je besoin pour que cela fonctionne sous Linux.
int
main(int argc, char **argv)
{
__asm ("movq $1,%rax; movq <*>,%rdi; syscall"); /* exit(0) ? */
return 0;
}
Merci.
La solution
Pourquoi est-ce que cela fait des ordures au lieu de quitter mon programme gracieusement?
Per CESA-2009-001 , " Syscall 1 est quitter sur i386 mais écrire sur x86_64 ".
De quoi aurais-je besoin pour que cela fonctionne sous Linux
Utilisez les ordinaux d'appels système à partir du unistd_64.h
J'espère que ça aide!
Autres conseils
L’appel système 1 est une sortie sur i386 mais une écriture sur x86-64, je crois.
EDIT: cela semble inexact: Selon le Web, qui ne semble pas avoir trop d’informations sur l’assemblage Linux x86-64, cela semble être la configuration de registre attendue avant l’instruction 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??