Как напечатать трассировку стека пользовательских пространств в пространстве ядра Linux

Скажем, я подключаю обработчик sys_ * (например, sys_open); когда я нахожу аргумент, переданный из пространства пользователя, вредоносным, я печатаю трассировку стека пространства пользователя Как мне это сделать?

(dump_stack () печатает только стек ядра)

Ответы на вопрос(2)

Решение Вопроса

oprofile поддерживает трассировки стеков пространства пользователя, которые вычисляются в ядре путем обхода стеков пространства пользователя. (Но обратите внимание: он не разрешает символы; это делается инструментами отчетности в пространстве пользователя.)

Если бы мне пришлось решать эту проблему, я бы начал (снова) смотреть на код oprofile и просто использовать / адаптировать то, что есть.

Может быть, этот вид "злонамеренный" событие может быть просто смоделировано как некое событие, которое нужно записать, хм.

Вы можете отправить сигнал (например, SIGBUS, SIGKABRT), который может генерировать файл дампа ядра, целевому процессу в ядре.

Например:

 do_send_sig_info(SIGABRT, SEND_SIG_FORCED, current, true);

Затем вы можете использовать GDB, чтобы показать обратный след сгенерированного файла ядра.

Это очень сложно с ограниченной областью применения.

Ваш ответ на вопрос