단일 명령줄로 커널 패닉을 일으킬 수 있습니까?
sudoing 사용자에게 가장 간단한 명령은 무엇입니까? 일반 사용자에게 가장 간단한 명령은 무엇입니까(있는 경우)?
명령의 일부로 콘텐츠를 다운로드하는 것이 권장되는 시나리오는 포함되지 않습니다.
답변1
답변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
및 gcc
Linux 커널 헤더( 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);