我突然想到 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
)
归档时间: |
|
查看次数: |
370 次 |
最近记录: |