Попытка настроить Errno с помощью NASM - PullRequest
1 голос
/ 12 июля 2020

Я делаю школьный проект и пытаюсь настроить переменную Errno с помощью NASM.

Мое упражнение состоит в том, чтобы воспроизвести функцию записи, используя только NASM. Я вообще не могу использовать язык C. Моя функция должна разрешить файлу C читать значение Errno, если есть ошибка (например, длина записи <0). </p>

Я пытался использовать call ___error ("extern ___error" в заголовок файла), но я не совсем уверен, как его следует использовать.

Я понял, что Errno не связан с конкретным регистром.

Итак, мой вопрос: как что мне делать, чтобы присвоить Errno хорошее значение без использования языка C?

Вот мой код на данный момент:

extern  ___error
SYS_WRITE_MAC equ 0x2000004
SYS_WRITE_LINUX equ 4
section .text
    global _ft_write
_ft_write:
    cmp rdx, 0
    jl _end
    cmp rdi, 0
    jl _end
    mov rax, SYS_WRITE_MAC
    syscall
    mov rdi, rax
    mov r15, rax
    call ___error
    mov rax, r15
    ret
_end:
    call ___error
    mov rax, -1
    ret

Извините, если я не понимаю, я ' м не родной англи sh динамик.

1 Ответ

1 голос
/ 12 июля 2020

Я наконец понял:

Использование «call ___error» позволяет возвращать int * эту точку в переменной Errno. Таким образом, решение состоит в том, чтобы изменить байт, на который указывает Rax, после использования call ___ error.

...