android - 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!");
}
解决方案
推荐阅读
- system-verilog - 如何将“结构数组”与“信号数组”匹配?(未包装)
- ios - 为什么 expo-file-system 在 Jest 中不起作用?
- java - 向预先编写的程序添加更多类
- java - 如何在片段中单击按钮时检索 EditTexts 和 Spinners?
- c++ - 如何检查输入是否为字符并显示为“无效输入”,否则将按原样运行
- javascript - document.scrollTo 在运行时不起作用
- python - Django中是否有VideoField之类的东西?
- delphi-10.3-rio - 无法使用 Delphi 10.3 在 Android 上获取 Documents 文件夹的正确路径
- java - @AutoAnnotation 有什么用?怎么可能使用?
- r - 使用 plotOutput 中的过滤器获取 Shiny 应用程序中的动态用户定义数据