Вызов sprintf в сборке x64 - PullRequest
       85

Вызов sprintf в сборке x64

0 голосов
/ 18 апреля 2020

Кажется, я не могу правильно вызвать 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.

...