【问题标题】:How to print the userspace stack trace in linux kernelspace如何在 Linux 内核空间中打印用户空间堆栈跟踪
【发布时间】:2012-04-29 06:12:51
【问题描述】:

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

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

【问题讨论】:

    标签: linux-kernel


    【解决方案1】:

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

    例如:

     do_send_sig_info(SIGABRT, SEND_SIG_FORCED, current, true);
    

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-02-04
        • 1970-01-01
        • 1970-01-01
        • 2018-03-28
        • 2012-10-06
        • 2014-02-01
        • 1970-01-01
        相关资源
        最近更新 更多