Преимущество kprobes перед kretprobes - PullRequest
0 голосов
/ 15 декабря 2018

Как kprobes, так и kretprobes позволяет вам вводить запрос для конкретной инструкции в адресе ядра.

Если вы регистрируете kprobe, pre_handler выполняется перед фактической функцией, а post_handler - после фактической функции

С помощью kretprobes вы можете получить entry_handler для выполнения перед фактической функцией и ret_handler для выполнения после фактической функции, и он содержит возвращаемое значение вызова функции.

Итак, в чем преимущество использованияkprobes над kretprobes, так как kretprobes имеет функцию kprobes плюс возвращаемое значение функции

1 Ответ

0 голосов
/ 17 декабря 2018

Kprobe может быть помещен в любую инструкцию , а не только в начале функции ядра (если, конечно, kprobes разрешено в данном коде ядра).Обработчики kprobe запускаются до и после инструкции.

Kretprobes имеет смысл только для проверки входов и выходов функций.Обработчики kretprobe запускаются при входе в функцию и при ее выходе, а не до и после какой-либо инструкции, как это делают обработчики kprobe.

Кроме того, если вам не нужно запускать свой код в функциидля выхода, kprobes может быть лучшим выбором, чем kretprobes, для проверки функций (хотя Ftrace может быть даже лучше).Kretprobes вмешивается с адресом возврата функции в стеке для выполнения обработчика.Если функция дает сбой или выдает обратную трассировку по какой-либо другой причине, она может содержать адреса внутренних компонентов kretprobe, а не реальные адреса возврата, что может сбивать с толку.

https://www.kernel.org/doc/Documentation/kprobes.txt

...