尝试使用 NASM 设置 Errno

Trying to set up Errno using NASM

我正在做一个学校的项目并尝试使用 NASM 设置变量 Errno。

我的练习是仅使用 NASM 复制函数 write。根本不会用C语言。如果出现错误(例如,写入长度 < 0),我的函数必须允许 C 文件读取 Errno 的值。

我尝试使用调用 ___error(文件 header 中的“extern ___error”),但我不太确定应该如何使用它。

我的理解是 Errno 没有链接到特定的寄存器。

所以我的问题是:我应该如何在不使用 C 语言的情况下为 Errno 分配好的值?

这是我目前的代码:

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

对不起,如果我无法理解,我不是以英语为母语的人。

终于明白了:

使用“call ___error”允许 return 一个指向变量 Errno 的 int*。 所以解决方案是在使用call ___error.

后修改Rax指向的字节