単一のコマンドでカーネルパニックを引き起こすには?

単一のコマンドでカーネルパニックを引き起こすには?

単一のコマンドラインでカーネルパニックを引き起こすことはできますか?

sudoingユーザーにとって最も簡単なコマンドは何ですか?一般ユーザーにとって最も簡単なコマンドは何ですか?

コマンドの一部としてコンテンツをダウンロードすることを推奨するシナリオは含まれません。

答え1

FreeBSD:

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ルートmakeおよびgccLinuxカーネルヘッダー(apt install build-essential make gccDebian / 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);

関連情報