2011-11-26 37 views
4

我正在使用ptrace(2)監視其他進程系統調用的軟件。不幸的是,大多數現代操作系統都實現了一些在Linux中被稱爲vsyscalls的快速用戶模式系統調用。禁用Linux中的vsyscalls

有沒有什麼辦法可以禁止單個進程使用vsyscalls/vDSO,或者如果這是不可能的話,對於整個操作系統呢?

+0

你是否暗示'ptrace'不能捕獲所有vsyscall-ed系統調用? –

回答

5

嘗試echo 0 > /proc/sys/kernel/vsyscall64

如果你想上的ptrace的gettimeofday電話,他們都沒有顯示出來,什麼時間源使用(pmtimer,ACPI,TSC,HPET等)的系統。我想知道你是否試圖強迫你的計時器像pmtimer這樣的老東西幽默我。即使在vsyscall設置爲零的情況下,許多gtod定時器特定優化中的一個可能會導致您的ptrace調用被避免。

+1

試過了,似乎沒有工作,我仍然沒有看到time/gettimeofday系統調用。我也嘗試過'vdso = 0'啓動選項,但沒有成功。 – Michael

+0

@Michael你看看gettimeofday的來源,看看它是否尊重vsyscall標誌?今晚我會自己研究一下。 –

+0

好吧,我*可以*看到'gettimeofday'系統調用與vsyscall64 = 0,但我仍然沒有看到'時間'系統調用。 – Michael

0

對於較新的系統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/...中的其他配置文件覆蓋,因此請仔細檢查何時添加自定義配置。