如果进程能捕获 SIGKILL 会怎样:动手改内核试一试
来源:vulpinecitrus.info — 2025-02-14
📋 概述
SIGKILL 与 SIGSTOP 是 POSIX 里唯二不可捕获、不可屏蔽的信号。作者从 kernel/signal.c 入手,找到内核在 get_signal 里对这两个信号的特殊处理,改掉它让用户态可以注册处理函数,再编译内核启动——结果系统一切正常,因为所有人都默认这条路走不通,从没人试过。
🔑 核心要点
- 内核在退出到用户态前检查待处理信号,get_signal 决定后续:无处理器则停止线程组或整组退出
- handle_signal 并不真的处理信号,它只负责搭好用户态栈帧,把指令指针指向用户注册的 sa_handler
- 光改内核不够,还要改用户态路径,否则 rt_sigaction 与 sigprocmask 会先把这两个信号剔掉
- 补丁没有覆盖 ptrace、strace、signalfd 等相关路径,作者自己承认并不完整
- 结论是这些「天经地义」的规则只是某个人在某个时刻写进代码里的
💡 金句
如果你被代码里的某条规则挡住了,那这条规则是某个人写下的。你可以把手伸进去,翻代码,把它挖出来。
← 返回 Lobsters 首页