3

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

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

4

2 回答 2

4

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

例如:

 do_send_sig_info(SIGABRT, SEND_SIG_FORCED, current, true);

然后您可以使用 gdb 显示生成的核心文件的回溯。

应用范围有限,这非常棘手。

于 2016-07-18T07:55:55.607 回答
0

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

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

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

于 2012-04-18T01:39:31.913 回答