我正在为 Android 编写一些内联汇编代码,在 x64 Android 模拟器中使用 GDB 逐步执行代码时,我看到我尝试执行的系统调用出现了
SIGSYS Bad System Call
错误。我尝试将代码作为独立可执行文件运行(不是 Android 应用程序,也在模拟器中运行),并且它工作正常,没有错误。
我在网上搜索了错误代码,网上的文章似乎指向seccomp。 seccomp 是否会限制我可以进行的系统调用?我在哪里可以找到有关此内容的更多详细信息?
我的代码片段如下
char *filename = "/system/bin/sh";
int f_ok = F_OK;
int ret_val;
#ifdef __x86_64__
__asm__ volatile(
"movq $21, %%rax\n\t"
"movq %1, %%rdi\n\t"
"movq %2, %%rsi\n\t"
"syscall\n\t"
"movq %%rax, %0"
: "=m"(ret_val)
: "m"(filename), "m"(f_ok)
: "%rax", "%rdi", "%rsi", "cc", "memory"
);
__android_log_print(ANDROID_LOG_VERBOSE, "inline_assembly", "ret_val %i", ret_val);
我根据此链接使用系统调用号 (https://chromium.googlesource.com/chromiumos/docs/+/master/constants/syscalls.md#x86_64-64_bit)。
我不确定该错误是由我的代码还是seccomp引起的。任何建议表示赞赏。
如果您的进程收到 SIGSYS,则意味着安装了系统调用过滤器。所以,是的,它肯定与 seccomp(2) 有关。