说,我钩入了一个sys_ *(例如sys_open)处理程序;当我发现从用户空间传递的参数是恶意的时,我会打印用户空间的堆栈跟踪。我该怎么做?如何在Linux内核空间打印用户空间堆栈跟踪
(dump_stack()只打印内核栈)
说,我钩入了一个sys_ *(例如sys_open)处理程序;当我发现从用户空间传递的参数是恶意的时,我会打印用户空间的堆栈跟踪。我该怎么做?如何在Linux内核空间打印用户空间堆栈跟踪
(dump_stack()只打印内核栈)
oprofile
具有用于用户空间栈跟踪支持,而这些在内核通过遍历用户空间堆栈计算的。 (但是注意:它不能解析符号;这是通过用户空间中的报告工具完成的。)
如果我必须解决这个问题,我将开始再次查找oprofile代码,并使用/适应那里。
也许这种“恶意”的发生可能只是建模为一种oprofile事件被记录,嗯。
您可以向内核中的目标进程发送一个可生成核心转储文件的信号(例如SIGBUS,SIGKABRT)。
例如:
do_send_sig_info(SIGABRT, SEND_SIG_FORCED, current, true);
然后你可以使用gdb来显示生成的核心文件的回溯。
这是非常棘手的应用范围有限。