Coba echo 0 > /proc/sys/kernel/vsyscall64
Jika Anda mencoba melakukan ptrace pada panggilan gettimeofday dan tidak muncul, sumber waktu apa yang digunakan sistem (pmtimer, acpi, tsc, hpet, dll). Saya ingin tahu apakah Anda akan menghibur saya dengan mencoba memaksakan pengatur waktu Anda ke sesuatu yang lebih tua seperti pmtimer. Ada kemungkinan salah satu dari banyak pengoptimalan khusus gtod timer menyebabkan panggilan ptrace Anda dihindari, bahkan dengan vsyscall disetel ke nol.
Apakah ada cara untuk menonaktifkan penggunaan vsyscalls/vDSO untuk satu proses atau, jika tidak memungkinkan, untuk keseluruhan sistem operasi?
Ternyata ada IS cara untuk menonaktifkan penautan vDSO secara efektif untuk satu proses tanpa menonaktifkannya di seluruh sistem menggunakan ptrace
!
Yang harus Anda lakukan adalah menghentikan proses yang dilacak sebelum kembali dari execve
dan hapus AT_SYSINFO_EHDR
entri dari vektor tambahan (yang muncul langsung setelah variabel lingkungan di sepanjang wilayah memori yang ditunjukkan di rsp
). PTRACE_EVENT_EXEC
adalah tempat yang baik untuk melakukan ini.
AT_SYSINFO_EHDR
adalah apa yang digunakan kernel untuk memberi tahu tautan sistem tempat vDSO dipetakan dalam ruang alamat proses. Jika entri ini tidak ada, ld
tampaknya bertindak seolah-olah sistem belum memetakan vDSO.
Perhatikan bahwa ini tidak menghapus peta vDSO dari memori proses Anda, ini hanya mengabaikannya saat menautkan pustaka bersama lainnya. Program jahat masih dapat berinteraksi dengannya jika pembuatnya benar-benar menginginkannya.
Saya tahu jawaban ini agak terlambat, tetapi saya harap informasi ini akan menghindarkan beberapa orang yang malang dari sakit kepala
Untuk sistem yang lebih baru echo 0 > /proc/sys/kernel/vsyscall64
mungkin tidak bekerja. Di Ubuntu 16.04 vDSO dapat dinonaktifkan di seluruh sistem dengan menambahkan parameter kernel vdso=0
di /etc/default/grub
di bawah parameter:GRUB_CMDLINE_LINUX_DEFAULT
.
PENTING:Parameter GRUB_CMDLINE_LINUX_DEFAULT
mungkin ditimpa oleh file konfigurasi lain di /etc/default/grub.d/...
, jadi periksa kembali kapan harus menambahkan konfigurasi khusus Anda.