我正在使用ptrace(2)监视其他进程系统调用的软件。不幸的是,大多数现代操作系统都实现了一些在Linux中被称为vsyscalls的快速用户模式系统调用。禁用Linux中的vsyscalls
有没有什么办法可以禁止单个进程使用vsyscalls/vDSO,或者如果这是不可能的话,对于整个操作系统呢?
我正在使用ptrace(2)监视其他进程系统调用的软件。不幸的是,大多数现代操作系统都实现了一些在Linux中被称为vsyscalls的快速用户模式系统调用。禁用Linux中的vsyscalls
有没有什么办法可以禁止单个进程使用vsyscalls/vDSO,或者如果这是不可能的话,对于整个操作系统呢?
尝试echo 0 > /proc/sys/kernel/vsyscall64
如果你想上的ptrace的gettimeofday电话,他们都没有显示出来,什么时间源使用(pmtimer,ACPI,TSC,HPET等)的系统。我想知道你是否试图强迫你的计时器像pmtimer这样的老东西幽默我。即使在vsyscall设置为零的情况下,许多gtod定时器特定优化中的一个可能会导致您的ptrace调用被避免。
对于较新的系统echo 0 > /proc/sys/kernel/vsyscall64
可能无法正常工作。在Ubuntu 16.04中,通过在参数GRUB_CMDLINE_LINUX_DEFAULT
下添加/etc/default/grub
中的内核参数vdso=0
,可以禁用系统范围内的vDSO。
重要说明:参数GRUB_CMDLINE_LINUX_DEFAULT
可能会被/etc/default/grub.d/...
中的其他配置文件覆盖,因此请仔细检查何时添加自定义配置。
你是否暗示'ptrace'不能捕获所有vsyscall-ed系统调用? –