Аргументы выборки kprobe_events не работают на ARM

Следующий пример события kprobe_based работает хорошо:

$ echo 'p:myprobe do_sys_open' > /sys/kernel/debug/tracing/kprobe_events

Но добавление аргументов выборки не работает:

$ echo 'p:myprobe do_sys_open dfd=%ax filename=%dx flags=%cx mode=+4($stack)' > /sys/kernel/debug/tracing/kprobe_events 
Invalid argument

Я думаю, что проблема в %ax, %dx... Каково их значение? И как заставить этот код работать?


person bestn    schedule 10.05.2018    source источник


Ответы (1)


%ax, %dx и т. д. относятся к регистрам вашей системы. Как указано в документации, вам потребуется изменить их, если ваша архитектура не x86:

Обратите внимание, какая запись в регистре/стеке назначается каждому аргументу функции, зависит от ABI для конкретной архитектуры.

Поскольку это выглядит так, как будто вы находитесь на руке (тег raspberry-pi), вы можете использовать следующее:

$ echo 'p:myprobe do_sys_open dfd=%r0 filename=%r1 flags=%r2 mode=%r3' > /sys/kernel/debug/tracing/kprobe_events
person pchaigno    schedule 12.05.2018
comment
Спасибо!!, я знаю документацию!. Но я не знал %r1, %r2 как параметры аргументов функций. Откуда ты это знаешь?? Что за документ я могу видеть, что - person bestn; 15.05.2018
comment
Это имена регистров в ARM: davespace.co. uk/arm/introduction-to-arm/registers.html и stackoverflow.com/questions/33245751/android-cpu-register-names. - person pchaigno; 15.05.2018