Кажется, я не могу правильно вызвать sprintf()
в сборке.
Когда я пытаюсь dprintf()
мой буфер, который теперь должен быть отформатирован, все, что я получаю:
(null)
и ошибка сегментации. При запуске lldb
с моей программой, strlen()
является причиной сбоя, поскольку он не может найти \0
в моем буфере.
Вот мой код:
mov rdi, buff
mov rsi, 0
mov rdx, 17
call memset
lea rsi, [rel n_head]
mov rdx, rax
call sprintf
mov rdx, rdi
lea rsi, [rel fmt]
mov rdi, 1
call dprintf
...
section .data
n_head: db "Low battery: %d%%", 0
fmt: db "%s", 10, 0
section .bss
buff: resb 17
Что я сделал не так?
Я собираюсь с nasm -f elf64
и clang
с nasm 2.14.02 и llvm 10.0.0 на FreeBSD 12.1-RELEASE amd64.