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)