各位!
我试图使用程序集函数来做一些项目,在c.中,我使用errno.h调用。所以我想写一些与syscalls相关的错误,为了能够使用perror等等,我知道syscall在失败时返回到rax负值,所以-rax = error代码。
在我的errno.h错误中,描述为extern int *__error(void)。
在我看来,如果我发现syscall的返回值小于零,我需要调用___error,然后我需要编写-rax才能从___error返回,但我不知道怎么回事。
我使用macOS和NASM。更确切地说,有一个原型我的写作功能:
global _ft_write
extern ___error
_ft_write:
mov rax, 0x2000004
syscall
cmp rax, 0
jl errno
ret
errno:
call ___error
mov rax, [rax]
neg rax
ret
for compile: nasm -fmacho64
这是我的主要:
#include <stdio.h>
#include <errno.h>
int main(void)
{
printf("Write return: %d\n", ft_write(15, "wrong file descriptor", 3));
printf("Error code: %d\n", errno); return(1);
}
输出:写返回:9错误代码:0
我是新装配的,如果问题是愚蠢的,请提前感谢。
发布于 2020-08-11 01:38:58
__error
返回指向rax
中的int的指针。所以你必须做两个步骤:
获取值的
德雷克:
mov rax, [rax] ;Nearly equals to rax= (*rax)
否定rax:
neg rax ; rax=-rax
编辑,根据您的评论:只需使用:
mov <someFreeRegister>, qword [rax]
neg <someFreeRegister>
mov qword [rax], <someFreeRegister>
https://stackoverflow.com/questions/63355469
复制相似问题