我正在使用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系統調用? –