【发布时间】:2020-11-04 17:44:35
【问题描述】:
我想知道是否有人可以解决我的问题。 我正在为学校做一个项目。这个项目是关于创建一个使用系统调用的函数(仅在 NASM 中)(我必须创建 ft_read 来重现真实读取系统调用的行为)。
情况如下:
当一切正常(FD、buff、count)时,我的功能正常工作。
但是我不知道如何检查系统调用是成功还是失败。
例如:当我使用假 fd(例如 -1)时,系统调用 read 在 rax 中返回 9。 我知道 9 是变量 Errno 的错误代码。
问题是我不知道如何区分 errno 的错误代码和 read 的返回值(文件中的 9 个字符的红色)。
如果有人知道该怎么做,我很高兴知道!
这是我目前的代码:
extern ___error
SYS_READ_MAC equ 0x2000003
SYS_READ_LINUX equ 3
section .text
global _ft_read
_ft_read:
cmp rdi, 0
jl _error
cmp rsi, 0
je _error
cmp rdx, 0
jl _error
mov rax, SYS_READ_MAC
syscall
cmp rax, 0
jl _error
ret
_error:
mov r10, rax
call ___error
mov qword [rax], r10
mov rax, -1
ret
对不起,如果我的英语不完美,我不是以英语为母语的人。
【问题讨论】:
-
它甚至不汇编:file.asm:15: 错误:解析器:预期指令(我将
cmpq更改为cmp) -
是的,对不起。我没有意识到我分享了我修改后的文件(我测试了一些东西,因为我在互联网上看到 cmpq 可能是一个解决方案,但我没有成功使其工作)
标签: macos assembly x86-64 system-calls errno