Изменить формат вывода трассировки событий системного вызова на ftrace

Я включил трассировку событий ftrace для системного вызова sys_enter_openat. Соответствующий выходной формат, указанный в events/syscalls/sys_enter_openat/format,

print fmt: "dfd: 0x%08lx, filename: 0x%08lx, flags: 0x%08lx, mode: 0x%08lx", ((unsigned long)(REC->dfd)), ((unsigned long)(REC->filename)), ((unsigned long)(REC->flags)), ((unsigned long)(REC->mode))

Как и ожидалось, пример строки вывода для ftrace выглядит примерно так:

msm_irqbalance-1338  [000] ...1 211710.033931: sys_openat(dfd: ffffff9c, filename: 5af693f224, flags: 2, mode: 0)

Есть ли способ изменить формат вывода, чтобы filename: 5af693f224 отображалось как filename: <string> вместо адреса? Я предполагаю, что это было бы возможно с использованием systemtap или krpobe, но моя установка не позволяет использовать их на данный момент.


person Madhur Rawat    schedule 31.03.2019    source источник


Ответы (1)


Вы можете определить события kprobe в своем собственном формате:

cd /sys/kernel/debug/tracing
echo 'p:open do_sys_open file=+0(%si):string' > kprobe_events
echo 1 > events/kprobes/open/enable
cat trace_pipe

который выводит:

cat-123 [001] .... 123.123: open: (do_sys_open+0x0/0x80) file="/etc/fstab"
cat-123 [001] .... 123.124: open: (do_sys_open+0x0/0x80) file="/dev/zero"

Подробнее см.: https://events19.linuxfoundation.org/wp-content/uploads/2017/12/oss-eu-2018-fun-with-dynamic-trace-events_steven-rostedt.pdf

person patraulea    schedule 19.05.2021