繁体   English   中英

如何在Linux内核中找到信号处理程序定义?

[英]How to find signal handlers definitions in Linux kernel?

我正致力于"Creation of Postmortem data logger in Linux on Intel architecture" 它只不过是核心效用创造。 任何机构都可以共享有关各种信号( SIGSEGV,SIGABRT,SIGFPE etc )的信号处理程序如何在Linux内核中内部实现的应用程序崩溃时产生core dump的详细信息。 我需要根据自己的用户特定需求重新编写这些信号处理程序并重建内核。 它使我的内核生成核心文件(在崩溃应用程序时),具有用户特定的需求,如显示registers,stackdump and backtrace etc

任何人都可以分享有关它的详细信息....感谢所有的回复者:)

您可能根本不需要修改内核 - 内核支持在发生核心转储时调用用户空间应用程序。 core(5)手册页

从内核2.6.19开始,Linux支持/proc/sys/kernel/core_pattern文件的替代语法。 如果此文件的第一个字符是管道符号( | ),则该行的其余部分将被解释为要执行的程序。 核心转储不是写入磁盘文件,而是作为程序的标准输入。

实际的转储代码取决于转储的格式。 对于ELF格式,请查看fs/binfmt_elf.c文件。 我有一个elf_dump_core函数。 (与其他格式相同。)

这是由kernel/signal.c get_signal_to_deliver中的get_signal_to_deliver触发的,它调用fs/exec.c do_coredump ,后者调用处理程序。

当你想知道在Linux内核中如何完成某些事情时,Linux交叉引用LXR通常很有帮助。 它是内核源代码的浏览和搜索工具。

搜索“核心转储”会返回很多命中,但最有希望看到的两个是fs/exec.cfs/proc/kcore.c (很有希望因为文件名相当通用,特别是你没有想从特定于架构的东西开始)。 kcore.c实际上是用于内核核心转储,但fs/exec.c的命中是在函数do_coredump ,这是转储进程核心的主要功能。 从那里,您可以读取函数以查看它的功能,并搜索以查看它的调用位置。

do_coredump大多数代码都是关于确定是否转储核心以及转储的位置。 转储的内容在最后处理: binfmt->core_dump(&cprm) ,即这取决于可执行格式(ELF,a.out,...)。 所以你的下一个搜索是在core_dump结构字段上,特别是它的“用法”; 然后选择对应于可执行格式的匹配。 ELF可能就是你想要的,所以你可以使用elf_core_dump函数。

话虽这么说,我不相信你对你的目标的描述,你想要的是真正改变核心转储格式,而不是编写一个分析现有转储的工具。

您可能对分析内核崩溃转储的现有工作感兴趣。 其中一些工作也与进程转储相关,例如gcore扩展包括内核崩溃转储中的进程转储

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM