Tiba-tiba terpikir betapa mudahnya bagi seorang sudoer untuk merusak kernel, jadi saya mencoba sesuatu seperti ini:
#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);
}
Maklum, tanpa sudo , menjalankan program ternyata kesalahan segmen. Namun , saya TIDAK ADA ketika menjalankannya melalui sudo ./a.out ! Bahkan hello world di baris pertama ditekan tanpa kesalahan atau peringatan sama sekali.
Adakah yang bisa menjelaskan apa yang terjadi?
Jawaban yang Diterima:
Tentu saja itu tidak akan membuat kernel crash, Anda menulis ke ruang memori virtual dari program Anda sendiri, bukan real ruang memori kernel.
Pelajari lebih lanjut tentang memori virtual di sini
P.S:
Mengapa printf tidak mencetak apa-apa? Secara default, output standar adalah buffer baris, dan hello world Anda tidak mengandung pemisah garis.
Jadi jika program macet, Anda tidak akan melihat output itu (Coba gunakan puts atau menambahkan \n dalam pesan Anda)