¿Por qué esta impresión de basura en lugar de salir de mi programa correctamente? Utilizo las llamadas al sistema de esta manera en BSD, y me pregunto qué necesitaría para que funcione en Linux.Syscall desde el asm en línea en x86_64 Linux?
int
main(int argc, char **argv)
{
__asm ("movq $1,%rax; movq $0,%rdi; syscall"); /* exit(0) ? */
return 0;
}
Gracias.
¡gracias! eso es todo. Sin embargo, no sé por qué tuvieron que cambiarlo. Entonces BSD usa los números tradicionales mientras Linux 64 los ha cambiado. Esto significa que no puedo reutilizar mi código :( – jbcreix
@jbcreix, por curiosidad * ¿por qué? ¿Harías esto en lugar de usar las llamadas portátiles 'exit()' y 'write()'? ¿No es esto solo un problema? ? – RBerteig
Las llamadas portátiles necesitan vincularse a glibc u otras bibliotecas C. De esta forma puedo implementar solo las funciones que necesito de la manera que necesito e independiente del SO. Por supuesto, la vinculación estática lograría un resultado similar, pero luego hay problemas de licencia con código GPL – jbcreix