首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Linux中禁用vsyscalls

在Linux中禁用vsyscalls
EN

Stack Overflow用户
提问于 2011-11-26 16:55:36
回答 4查看 4.6K关注 0票数 8

我正在开发一个软件,该软件可以使用ptrace(2)监视其他进程的系统调用。不幸的是,大多数现代操作系统都实现了某种快速的用户模式系统,在Linux中称为vsyscalls。

是否有任何方法可以在单个进程中禁用vsyscalls/vDSO,或者,如果不可能,则禁用整个操作系统?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-26 16:59:55

试试echo 0 > /proc/sys/kernel/vsyscall64

如果您试图对gettimeofday调用进行跟踪,并且它们没有出现,那么系统使用的是什么时间源(pmtimer、acpi、tsc、hpet等)。我不知道你会不会通过强迫你的计时器去做一些更老的东西,比如pmtimer来逗我开心。许多特定于gtod定时器的优化可能会导致避免ptrace调用,即使vsyscall设置为零。

票数 7
EN

Stack Overflow用户

发布于 2018-09-19 09:16:21

是否有任何方法可以在单个进程中禁用vsyscalls/vDSO,如果不可能的话,可以禁用整个操作系统吗?

事实证明,,这是一种有效地禁用单个进程链接vDSO的方法,而不禁用整个系统使用ptrace

您所要做的就是在跟踪的进程从execve返回之前停止它,并从辅助向量中删除AT_SYSINFO_EHDR条目(它直接在rsp中指向的内存区域的环境变量之后出现)。PTRACE_EVENT_EXEC是这样做的好地方。

AT_SYSINFO_EHDR是内核用来告诉系统链接器vDSO映射到进程地址空间中的位置的。如果这个条目不存在,ld似乎就像系统没有映射vDSO一样。

请注意,这并不是以某种方式将vDSO从进程内存中取消映射,而是在链接其他共享库时忽略它。如果作者真的愿意的话,恶意程序仍然能够与它交互。

我知道这个答案有点晚了,但我希望这个信息能让一些可怜的人头痛。

票数 4
EN

Stack Overflow用户

发布于 2017-05-16 01:09:10

对于较新的系统,echo 0 > /proc/sys/kernel/vsyscall64可能无法工作。在Ubuntu16.04中,可以通过在vDSO参数:GRUB_CMDLINE_LINUX_DEFAULT下在/etc/default/grub中添加内核参数vdso=0来禁用系统范围内的GRUB_CMDLINE_LINUX_DEFAULT

注意:参数GRUB_CMDLINE_LINUX_DEFAULT可能会被/etc/default/grub.d/...中的其他配置文件覆盖,所以请反复检查何时添加自定义配置。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8280014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档