Cri*_*yle 7 linux sandbox kernel chroot
据我所知,ptrace 只能通过 PTRACE_SYSCALL 获取系统调用号,但是 x86 和 x64 中的系统调用号是不同的。那么有没有办法找出这个系统调用的真正起源?
我现在正在编写一个程序来通过系统调用号限制其他一些系统调用,我知道 x86 和 x64 上的系统调用号,但是一些程序使用“int 80h”而不是“系统调用”,这样他们就可以做危险的事情我限制在 x64 上。例如,我在 x64 上禁止了 fork(),他们可以使用 'int 80h(2)'(fork()) 而我认为他们正在使用 'syscall(2)'(open()),因此他们可以打破限制. 尽管 ptrace 可以跟踪它们并获取系统调用号,但我无法区分系统调用实际来自何处。
cha*_*aos -2
这是系统调用sys_rt_sigtimedwait
(从内核 2.2 开始)。通过以下方式查看它的联机帮助页:
man 2 rt_sigtimedwait
Run Code Online (Sandbox Code Playgroud)
该系统调用会暂停执行,直到传递参数指定的信号(或一组信号)。还给出了暂停。
为了 100% 确定有一个名为unistd_64.h
. 在您的系统中搜索该文件。大多数情况下它位于包含文件夹 ( /usr/include/x86_64-linux-gnu/asm/unistd_64.h
) 中。里面有定义的数字。这是我的案例中的相关行(它也是 64 位系统,内核 3.2.0-58):
#define __NR_rt_sigtimedwait 128
__SYSCALL(__NR_rt_sigtimedwait, sys_rt_sigtimedwait)
Run Code Online (Sandbox Code Playgroud)
注意128
是80
十进制的十六进制。
归档时间: |
|
查看次数: |
807 次 |
最近记录: |