Die Verwendung von printf in der Baugruppe führt zu einer leeren Ausgabe

Ich versuche @ zu benutzprintf aus meinem Assembler-Code, dies ist ein minimales Beispiel, das nur @ drucken sollhello zu stdout:

.section  .rodata
hello:
    .ascii  "hello\n\0"
.section .text
    .globl _start        
_start:
    movq $hello, %rdi #first parameter
    xorl %eax, %eax #0 - number of used vector registers
    call printf        
#exit   
    movq $60, %rax
    movq $0, %rdi
    syscall

Ich baue es mit

gcc -nostdlib try_printf.s -o try_printf -lc

und wenn ich es starte, scheint es zu funktionieren: die Zeichenfolgehello wird ausgedruckt und der Beendigungsstatus ist0:

XXX$ ./try_printf
hello
XXX$ echo $?
0
XXX$

Aber wenn ich versuche, den Text zu erfassen, ist es offensichtlich, dass etwas nicht richtig funktioniert:

XXX$ output=$(./try_printf) 
XXX$ echo $output

XXX$ 

Die Variableoutput sollte den Wert @ habhello, ist aber leer.

Was stimmt nicht mit meiner Verwendung von printf?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage