Подтвердить что ты не робот

Вызов функции в ядре linux

Есть ли способ получить вызов функции в ядре linux? Я знаю, что __ func __ возвращает имя функции, которое выполняется. Я ищу функцию, которая называется " __ func __"

4b9b3361

Ответ 1

Вы можете получить вызывающего абонента с __builtin_return_address(0).

Вызывающий абонент __builtin_return_address(1) и т.д.

Это расширение GCC, задокументированное в руководстве gcc: http://gcc.gnu.org/onlinedocs/gcc/Return-Address.html

Изменить: Я должен, вероятно, указать, что вы получаете адрес вызывающего. Если вы хотите, чтобы имя функции было напечатано с помощью %pS, например:

printk("Caller is %pS\n", __builtin_return_address(0));

Если вы не хотите его печатать, вы можете использовать kallsyms_lookup() и т.д.

Ответ 2

Вы также можете распечатать все содержимое стека вызовов, вызвав dump_stack().

Ответ 3

Требуются ли указатели на кадры, зависит от арки, IIRC. Для x86 они, безусловно, хотят полностью использовать эти функции. Также обратите внимание, что по этой причине inlining может исказить точность встроенного_return_address.

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

Ответ 4

Чтобы получить имя функции вызывающего абонента, можно использовать следующую команду printk.

printk ( "Caller is% pF\n", __builtin_return_address (0));