如何在内核模块

时间:2016-12-27 04:15:12

标签: kernel-module backtrace

我想在内核模块中生成用户堆栈跟踪。 实际上我通过挂钩系统调用表创建了一个内核模块来拦截close系统调用。 我想知道谁在用户模式下调用此系统调用特定的fd。在我的内核模块中,比较跟踪fd和给定的参数,如果匹配,则想要建立一个用户空间调用堆栈。我尝试通过dump_stack()或WARN宏进行回溯,但它生成了kerenl堆栈跟踪。 是否可以在kerenl模块中获取用户堆栈跟踪?

2 个答案:

答案 0 :(得分:0)

如果你不介意用户程序被终止,你可以中止它e。 G。使用force_sig(SIGABRT, current)并使用调试器分析核心转储。

答案 1 :(得分:0)

您可以使用内核模块中的save_stack_trace_user()函数来实现:

void save_stack_trace_user(struct stack_trace *trace);

您可以查看内核中ftrace的工作方式:ftrace_trace_userstack