Warum wird Müll ausgegeben, anstatt das Programm ordnungsgemäß zu beenden? Ich verwende Systemaufrufe so auf BSD, und ich frage mich, was ich tun müsste, damit es unter Linux funktioniert.Syscall von Inline-Asm in x86_64 Linux?
int
main(int argc, char **argv)
{
__asm ("movq $1,%rax; movq $0,%rdi; syscall"); /* exit(0) ? */
return 0;
}
Danke.
danke! Das ist es. Ich weiß nicht, warum sie das ändern mussten. BSD verwendet also die traditionellen Zahlen, während Linux 64 sie geändert hat. Das bedeutet, dass ich meinen Code nicht wiederverwenden kann :( – jbcreix
@jbcreix, aus Neugier * warum * würdest du das tun, anstatt die portablen Aufrufe 'exit()' und 'write()' zu benutzen? Ist das nicht nur Ärger? ? – RBerteig
Die Portable Calls müssen mit glibc oder anderen C-Bibliotheken verlinkt sein, damit ich nur die Funktionen implementieren kann, die ich brauche und unabhängig vom Betriebssystem brauche.Natürlich würde statische Verknüpfung ein ähnliches Ergebnis erzielen, aber dann gibt es Lizenzprobleme mit GPL-Code – jbcreix