SIGSYS 错误系统调用(Android)

问题描述 投票:0回答:1

我正在为 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引起的。任何建议表示赞赏。

android assembly x86-64 system-calls inline-assembly
1个回答
0
投票

如果您的进程收到 SIGSYS,则意味着安装了系统调用过滤器。所以,是的,它肯定与 seccomp(2) 有关。

© www.soinside.com 2019 - 2024. All rights reserved.