Linux kernel 如何在linux内核空间中打印用户空间堆栈跟踪

Linux kernel 如何在linux内核空间中打印用户空间堆栈跟踪,linux-kernel,Linux Kernel,比如说,我挂上了一个sys_*(例如sys_open)处理程序;当我发现从用户空间传递的参数是恶意的时,我打印用户空间的堆栈跟踪。我怎么做 (dump_stack()仅打印内核堆栈)oprofile支持用户空间堆栈跟踪,这些跟踪通过遍历用户空间堆栈在内核中计算。(但请注意:它不会解析符号;这是由用户空间中的报告工具完成的。) 如果我必须解决这个问题,我会开始(再次)查看oprofile代码,然后使用/调整其中的内容 也许这种“恶意”事件可以简单地建模为一种要记录的操作配置文件事件,嗯。您可以向内

比如说,我挂上了一个sys_*(例如sys_open)处理程序;当我发现从用户空间传递的参数是恶意的时,我打印用户空间的堆栈跟踪。我怎么做


(dump_stack()仅打印内核堆栈)

oprofile
支持用户空间堆栈跟踪,这些跟踪通过遍历用户空间堆栈在内核中计算。(但请注意:它不会解析符号;这是由用户空间中的报告工具完成的。)

如果我必须解决这个问题,我会开始(再次)查看oprofile代码,然后使用/调整其中的内容

也许这种“恶意”事件可以简单地建模为一种要记录的操作配置文件事件,嗯。

您可以向内核中的目标进程发送一个信号(例如SIGBUS、SIGKABRT),它可以生成一个内核转储文件

例如:

 do_send_sig_info(SIGABRT, SEND_SIG_FORCED, current, true);
然后可以使用gdb显示生成的核心文件的回溯

它的应用范围有限,非常棘手