GNU/Linux >> Belajar Linux >  >> Linux

Apa yang Akan Saya Dapatkan Saat Sudo Program Penghancur Kernel?

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)


Linux
  1. Linux – Apa yang Harus Dilakukan Saat Desktop Linux Membeku?

  2. Apa yang Membuat Server Linux Kernel Mendasar?

  3. Bagaimana saya bisa mendapatkan kembali fungsi utama saya?

  1. Apa status register default saat program diluncurkan (asm, linux)?

  2. GDB:lx-simbol perintah yang tidak ditentukan

  3. Apa yang harus dilakukan ketika Ctrl + C tidak dapat menghentikan proses?

  1. Apa itu perangkat loop saat memasang?

  2. Apa itu kernel tercemar di Linux?

  3. Apa itu zImage, rootfs