首页 > 解决方案 > android ndk 系统调用上的一个神秘错误

问题描述

我在 android ndk 的系统调用中遇到了一个非常令人困惑的问题。我真的很难用语言说清楚,所以请看一下代码。

// 2nd: 调用汇编函数

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)

第二:调用程序集的示例代码,打印所需的字符串--[调用写入失败:.....]

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

第三:稍微修改一下代码,现在我不能得到想要的字符串,但是[syscall write Done!]

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

标签: androidandroid-ndk

解决方案


推荐阅读