- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如果子进程进行读取和写入以外的其他系统调用(甚至也过滤这些调用,但这是另一回事),我想终止它,但有些系统调用是默认完成的。
我编译了一个空的测试子(立即退出)程序,我还有一个父进程,它 fork 、启用 ptracing 并执行子程序。父进程每次都使用 PTRACE_SYSCALL 并检查 orig_eax。我的测试程序报告 child 停止了 49 次(我假设这意味着 48/2 + 1 次系统调用)。
我想知道系统调用序列是否始终相同(初始化)和/或是否有可能知道我何时可以开始以及何时停止在我的父进程中终止系统调用?
最佳答案
我曾经遇到过类似的问题(参见 my question on the topic)。当程序启动时,在调用 main()
之前,它会在初始化应用程序(例如加载共享库)时执行大量系统调用。我所做的只是允许更多的系统调用并使用另一种安全方式(例如 chroot
)来防止应用程序访问不需要的文件。
更好的选择是以某种方式找到程序的 main()
函数的入口点(参见 this tutorial 编写调试代码)并在该点之后禁用系统调用。我不知道在一般情况下是否可以这样做,但这就是我开始搜索的方式。
找到入口点后,还有一种方法可以限制程序进行某些系统调用。不是使用 PTRACE_SYSCALL
来检查程序完成的每个系统调用,而是注入(inject) prctl(PR_SET_SECCOMP, ...)
调用程序(使用 ptrace()
)然后让程序继续运行。
关于c++ - PTRACE_SYSCALL 和 orig_eax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9149626/
如果子进程进行读取和写入以外的其他系统调用(甚至也过滤这些调用,但这是另一回事),我想终止它,但有些系统调用是默认完成的。 我编译了一个空的测试子(立即退出)程序,我还有一个父进程,它 fork 、启
我是一名优秀的程序员,十分优秀!