【问题标题】:Trying to set up Errno using NASM尝试使用 NASM 设置 Errno
【发布时间】:2020-11-01 16:51:25
【问题描述】:

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

我的练习是仅使用 NASM 复制函数 write。我根本不会使用C语言。如果出现错误(例如要写入的长度

我尝试使用 call ___error(文件头中的“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

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

【问题讨论】:

    标签: assembly nasm system-calls errno


    【解决方案1】:

    我终于明白了:

    使用“调用 ___error”可以返回一个 int* 变量 Errno 上的那个点。 所以解决方法是在调用___error后修改Rax指向的字节。

    【讨论】:

    • 是的!没错!
    • 不错的回答方式,无需实际透露书面答案代码,因此 ft_student(作为我自己)必须寻求理解您的意思。发送!
    猜你喜欢
    • 2016-12-29
    • 2020-09-07
    • 2018-04-23
    • 1970-01-01
    • 2014-03-07
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    相关资源
    最近更新 更多