GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was bekomme ich, wenn Sudo ein Kernel-zerstörendes Programm ist?

Plötzlich fällt mir ein, wie einfach es für einen Sudoer sein wird um den Kernel zum Absturz zu bringen, also habe ich so etwas versucht:

#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);
}

Verständlicherweise ohne sudo , das Ausführen des Programms ergibt einen Segmentfehler. Allerdings , ich habe NICHT wenn es über sudo ./a.out ausgeführt wird ! Sogar die hello world in der ersten Zeile wird ohne Fehler oder Warnungen unterdrückt.

Kann jemand erklären, was passiert?

Akzeptierte Antwort:

Natürlich bringt es den Kernel nicht zum Absturz, Sie schreiben in den virtuellen Speicherplatz Ihres eigenen Programms, nicht in den real Kernel-Speicherplatz.

Erfahren Sie hier mehr über virtuellen Speicher

PS:

Warum printf druckt nichts? Standardmäßig ist die Standardausgabe zeilengepuffert und Ihr hello world enthält kein Zeilentrennzeichen.

Wenn das Programm also abgestürzt ist, werden Sie diese Ausgabe nicht beobachten (Versuchen Sie, puts zu verwenden oder Hinzufügen eines \n in Ihrer Nachricht)


Linux
  1. Linux – Was tun, wenn ein Linux-Desktop einfriert?

  2. Was macht einen Kernel-Linux-Server grundlegend?

  3. Wie kann ich bekommen, was meine Hauptfunktion zurückgegeben hat?

  4. GDB:lx-symbols undefinierter Befehl

  5. Was tun, wenn Strg + C einen Prozess nicht beenden kann?

Was tun bei einer Linux-Kernel-Panik?

Was ist Bonjour auf meinem Computer? PC-Leitfaden für das Windows 10 Bonjour-Programm

So überprüfen Sie, welche Linux-Kernel-Version ich verwende

Wie bringt man Ubuntu dazu, jedes Mal, wenn der Bildschirm entsperrt wird, automatisch ein Programm auszuführen?

Was ist ein Loop-Gerät bei der Montage?

Was ist zImage, rootfs