¿Cómo viene _exit (0) (salir por syscall) me impide recibir ningún contenido estándar?

Tengo un programa de ensamblaje Linux x86-32 GAS que termina así:

movl $1, %eax
movl $0, %ebx # argument for _exit
int $0x80

Cuando salgo así, el programa funciona normalmente, pero si trato de leer la salida estándar, no obtengo nada (es decir, menos o wc).

Intenté compilar un programa C mínimo y comparar los resultados de strace. La única diferencia que encontré fue que GCC creó el programa C int main() { printf("donkey\n"); }) sale implícitamente conexit_group(0) en la salida de strace.

Intenté modificar mi programa ASM para salir concall exit en lugar de la llamada al sistema sin procesar. El stdout ahora era legible como normal.

Caso de prueb

.data
douout: .string "monkey\n"
.text
.globl main

main:

pushl $douout
call printf
# Exit
movl $1, %eax
movl $0, %ebx
int $0x80

Compilar y ejecutar:

$ yasm -g dwarf2 -f elf -p gas t.asm && gcc -g -melf_i386 -o t t.o && ./t | wc -c
0

Esperado

7

EDITAR

Intenté llamar a ambostcflush yfflush, y todavía tengo el problema. Confflush Incluso recibo un segfault.

0xb7e9e7c9 in _IO_fflush (fp=0x804a018) at iofflush.c:42
42  iofflush.c: No such file or directory.
    in iofflush.c
(gdb) bt
#0  0xb7e9e7c9 in _IO_fflush (fp=0x804a018) at iofflush.c:42
#1  0x08048434 in main () at t.asm:12
(gdb) frame 1
#1  0x08048434 in main () at t.asm:12
12  call fflush
(gdb) list
7   
8   pushl $douout
9   call printf
10  # Exit
11  movl $0, %eax
12  call fflush
13  movl $1, %eax
14  movl $0, %ebx
15  int $0x80

EDIT2:

Está bien, ahora funciona todo el mundo. Estaba usando la convención de llamadas incorrecta que copié desde aquí:Printf sin nueva línea en el ensamblaje

El argumento a favor defflush debería estar en la pila, como de costumbre.

$ cat t.asm 
.data
douout: .string "monkey\n"
.text
.globl main

main:

pushl $douout
call printf
# Exit
pushl $0
call fflush
movl $1, %eax
movl $0, %ebx
int $0x80
$ yasm -g dwarf2 -f elf -p gas t.asm && gcc -g -melf_i386 -o t t.o && ./t | wc -c
7
$

Gracias a todos, especialmente a nos.

Respuestas a la pregunta(6)

Su respuesta a la pregunta