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