Использование printf в сборке приводит к пустому выводу
Я пытаюсь использоватьprintf
из моего кода на ассемблере, это минимальный пример, который должен просто напечататьhello
в стандартный вывод:
.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
Я строю это с
gcc -nostdlib try_printf.s -o try_printf -lc
и когда я запускаю его, кажется, работает: строкаhello
распечатывается и статус выхода0
:
XXX$ ./try_printf
hello
XXX$ echo $?
0
XXX$
Но когда я пытаюсь захватить текст, очевидно, что что-то не работает должным образом:
XXX$ output=$(./try_printf)
XXX$ echo $output
XXX$
Переменнаяoutput
должен иметь значениеhello
, но пусто.
Что не так с моим использованиемprintf
?