android ndk的syscall一个神秘的错误

时间:2019-04-20 09:18:18

标签: android android-ndk

我在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!");
     }

0 个答案:

没有答案