我在android ndk的syscall中遇到了一个非常令人困惑的问题。对于我来说,很难用语言将其弄清楚,所以请看一下代码。
//第二:调用汇编函数
1st:类似于汇编代码
extern "C" int self_set_errno(int err){
errno = err;
return -1;
}
ENTRY(self_syscall)
mov x8, x0
mov x0, x1
mov x1, x2
mov x2, x3
mov x3, x4
mov x4, x5
mov x5, x6
svc #0
cmn x0, #(MAX_ERRNO + 1)
cneg x0, x0, hi
b.hi self_set_errno
ret
END(self_syscall)
2nd:调用程序集的示例代码,该程序会打印所需的字符串-[无法调用write:.....]
int fd = STDIN_FILENO + 25;
const char *msg = "write via syscall\n";
int err = self_syscall(__NR_write, fd, msg, strlen(msg));
if(err < 0){
printf("Fail to call write: %s\n", strerror(errno));
}else{
printf("%s\n", "syscall write Done");
}
3rd:稍微更改一下代码,现在我无法获得所需的字符串,但是[syscall编写完成!]
int fd = STDIN_FILENO + 25;
const char *msg = "write via syscall\n";
if(self_syscall(__NR_write, fd, msg, strlen(msg)) < 0){
printf("Fail to call write: %s\n", strerror(errno));
}else{
printf("%s\n", "syscall write Done!");
}