Получать информацию о запуске определенного vdso - PullRequest
0 голосов
/ 21 ноября 2018

В настоящее время я пытаюсь реализовать свой собственный VDSO.Я использовал этот учебник , который объясняет, как сделать это для ядра 2.6.

Я проверил это, и я получил это работает.(Мне удалось создать переменную ядра и получить к ней доступ из пользовательского пространства.)

Есть ли способ узнать в ядре, когда вызывается vdso?Я предполагаю, что это не может быть сделано синхронно (так как vdso обрабатывается в пользовательском пространстве).Но есть ли какая-либо возможность (даже грязная) из ядра узнать, была ли вызвана функция (может быть, с аппаратной точкой останова или чем-то еще)?

Что я хотел бы сделать, это что-то вроде функции my_vdso_has_been_called()) в этом коде:

void update_vsyscall(/* […] */) {
    // […]
    if(my_vdso_has_been_called())
        do_something();
}

Примечание: функцию update_vsyscall можно найти в arch/x86/kernel/vsyscall_64.c

1 Ответ

0 голосов
/ 22 ноября 2018

Поскольку вы знаете, как объявлять разделяемую переменную и обращаться к ней как из ядра, так и из vDSO, вы можете использовать это: объявить новую переменную и увеличивать ее из vDSO всякий раз, когда она вызывается.

...