如何用单个命令引起内核恐慌?

如何用单个命令引起内核恐慌?

是否有可能用单个命令行引起内核恐慌?

对于 sudoing 用户来说,最直接的此类命令是什么?对于普通用户来说,最简单的命令是什么(如果有的话)?

建议将下载内容作为命令一部分的场景不算在内。

答案1

自由BSD:

sysctl debug.kdb.panic=1

Linux(更多信息在内核文档中):

echo c > /proc/sysrq-trigger

答案2

mkdir /tmp/kpanic && cd /tmp/kpanic && printf '#include <linux/kernel.h>\n#include <linux/module.h>\nMODULE_LICENSE("GPL");static int8_t* message = "buffer overrun at 0x4ba4c73e73acce54";int init_module(void){panic(message);return 0;}' > kpanic.c && printf 'obj-m += kpanic.o\nall:\n\tmake -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules' > Makefile && make && insmod kpanic.ko

编译一个通过调用函数导致内核崩溃的模块panic,需要root,需要makegccLinux内核头文件(apt install build-essential make gcc在debian/ubuntu上)

将命令中的“buffer overrun at 0x4ba4c73e73acce54”替换为有趣的东西以获得更多戏剧效果。

答案3

最简单的方法是按住 alt + print screen (sysrq) 并在按住它们的同时按 c 它的作用与 一点echo c > /proc/sysrq-trigger 解释:sysrq 键用于向内核本身发送低级命令,作为最后的手段尝试拯救系统。如果按住 alt + print screen(sysrq) 并按下它们旁边的另一个键,其效果与回显 sysrq-trigger 文件中的键相同。他们称其为触发器是有原因的;3“c”告诉内核崩溃(导致内核恐慌)

但是,您可能想查看“proc/sys/kernel/sysrq”的内容。如果它是 178 或其他值,您应该将其更改为 1。0 表示全部禁用,1 表示全部启用,任何大于 1 的值都是内核允许使用 sysrq 执行的特定操作的位图。

答案4

将以下代码编译到模块中并对其进行 insmod,您肯定会感到恐慌:

static int crash_module_init(void)

{
     printf("crash module starting\n");
     int *p = 0;

     printk("%d\n", *p);

     return 0;
}

static void crash_module_exit(void)
{
    printf("crash module exiting\n");
}

module_init(crash_module_init);
module_exit(crash_module_exit);

相关内容