我突然想到 sudoer使内核崩溃是多么容易,所以我尝试了这样的事情:
#include<stdio.h>
int main(){
printf("hello world");
int a;
printf("%p", &a);
int *p = (int*)0xffff000000000000; //x86_64, somewhere in the kernel space
printf("%p:%d", p,*p);
*p = 1;
printf("%p:%d", p,*p);
}
Run Code Online (Sandbox Code Playgroud)
可以理解,没有sudo,运行程序会导致段错误。不过,我NOTHING当通过执行它sudo ./a.out!甚至hello world第一行也被抑制,根本没有任何错误或警告。
有人可以解释发生了什么吗?
dai*_*isy 12
当然它不会使内核崩溃,您正在写入自己程序的虚拟内存空间,而不是real内核内存空间。
PS:
为什么printf不打印任何东西?默认情况下,标准输出是行缓冲的,并且您hello world不包含行分隔符。
因此,如果程序崩溃,您将不会观察到该输出(尝试在您的消息中使用puts或添加一个\n)