1

我将详细描述我的问题,并请原谅我的不守规矩和粗鲁。

我在 seccomp-BPF 和信号处理方面做了一些实验。一开始我遵循了这个教程

添加 SIGSYS 信号处理(syscall-reporter.c)后,如果程序执行一些无效的系统调用,我可以在下面得到一些输出:

Looks like you need syscall fstat(5) too!

execve我想知道如果我使用函数或其他方法执行任何其他可执行文件,如何打印系统调用名称。

我尝试过这样的事情:主进程(刚刚命名为 P0 的进程)首先添加 SIGCHLD 信号处理,然后分叉一个子进程(名为 P1)。P1 将添加 seccomp-bpf 规则并对无效的系统调用执行 seccomp 操作SCMP_ACT_TRAP,然后使用该execve函数将 P1 替换为可执行文件(名为 E)。当执行 E 并调用一些无效的系统调用时,P1 将抛出一个 SIGSYS 信号并退出,然后向 P0 发送 SIGHLD 信号。似乎 P0 无法从ucontext_t收到的 SIGHLD 信号中获取无效的系统调用名称。

P1 不能打印系统调用名称本身,因为

在 execve(2) 期间,已处理信号的处置被重置为默认值;

(来自sigaction 手册页

对不起我的英语不好。

4

0 回答 0