如何检查我的系统调用是否在 NASM 中失败
How can I check if my syscall failed in NASM
我想知道是否有人可以解决我的问题。
我正在为学校做一个项目。这个项目是关于创建一个使用系统调用的函数(仅在 NASM 中)(我必须创建 ft_read 来重现实际读取系统调用的行为)。
情况如下:
当一切正常(FD、buff、计数)时,我的功能正常工作。
但是我不知道如何检查系统调用是成功还是失败。
例如:当我使用假 fd(例如 -1)时,系统调用在 rax 中读取 returns 9。
我了解到 9 是变量 Errno 的错误代码。
问题是我不知道如何区分 errno 的错误代码和读取的 return 值(文件中 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
抱歉,如果我的英语不完美,我不是以英语为母语的人。
我找到了答案:
我没有意识到,我也不知道为什么,但我被设置为未签名模式。
所以我看不到rax是否包含负值。
在无符号模式下,如果最后一个操作(或最后一个系统调用?)失败,则进位标志 (CF) 设置为 1。
所以解决方案是:JC _error(如果进位标志设置为 1,则跳转到错误)。
我现在的代码:
extern ___error
SYS_READ_MAC equ 0x2000003
SYS_READ_LINUX equ 3
section .text
global _ft_read
_ft_read:
mov rax, SYS_READ_MAC
syscall
jc _error
ret
_error:
mov r10, rax
call ___error
mov qword [rax], r10
mov rax, -1
ret
我想知道是否有人可以解决我的问题。 我正在为学校做一个项目。这个项目是关于创建一个使用系统调用的函数(仅在 NASM 中)(我必须创建 ft_read 来重现实际读取系统调用的行为)。
情况如下:
当一切正常(FD、buff、计数)时,我的功能正常工作。
但是我不知道如何检查系统调用是成功还是失败。
例如:当我使用假 fd(例如 -1)时,系统调用在 rax 中读取 returns 9。 我了解到 9 是变量 Errno 的错误代码。
问题是我不知道如何区分 errno 的错误代码和读取的 return 值(文件中 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
抱歉,如果我的英语不完美,我不是以英语为母语的人。
我找到了答案:
我没有意识到,我也不知道为什么,但我被设置为未签名模式。 所以我看不到rax是否包含负值。
在无符号模式下,如果最后一个操作(或最后一个系统调用?)失败,则进位标志 (CF) 设置为 1。
所以解决方案是:JC _error(如果进位标志设置为 1,则跳转到错误)。
我现在的代码:
extern ___error
SYS_READ_MAC equ 0x2000003
SYS_READ_LINUX equ 3
section .text
global _ft_read
_ft_read:
mov rax, SYS_READ_MAC
syscall
jc _error
ret
_error:
mov r10, rax
call ___error
mov qword [rax], r10
mov rax, -1
ret