GNU/Linux >> Linux Esercitazione >  >> Linux

Cosa otterrei quando Sudo è un programma distruttivo del kernel?

Improvvisamente mi viene in mente quanto sarà facile per un sudoer per mandare in crash il kernel, quindi ho provato qualcosa del genere:

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

Comprensibilmente, senza sudo , l'esecuzione del programma determina un errore di segmento. Tuttavia , non ho NIENTE quando eseguilo tramite sudo ./a.out ! Anche il hello world in prima riga viene soppresso senza alcun errore o avviso.

Qualcuno può spiegare cosa sta succedendo?

Risposta accettata:

Ovviamente non andrà in crash il kernel, stai scrivendo nello spazio di memoria virtuale del tuo programma, non nel real spazio di memoria del kernel.

Scopri di più sulla memoria virtuale qui

P.S.:

Perché printf non stampa nulla? Per impostazione predefinita, l'output standard è con buffer di linea e il tuo hello world non contiene un separatore di riga.

Quindi, se il programma si arresta in modo anomalo, non osserverai quell'output (prova a utilizzare puts o aggiungendo un \n nel tuo messaggio)


Linux
  1. Linux:cosa accadrebbe se un disco rigido si guastasse mentre il kernel Linux era in esecuzione?

  2. Ottieni "autorizzazione negata" durante il reindirizzamento dell'output di Sudo Echo "xyz" su un file ??

  3. Cosa fa un programma quando viene inviato il segnale Sigkill?

  4. Quando assert() fallisce, qual è il codice di uscita del programma?

  5. Come posso ottenere ciò che la mia funzione principale ha restituito?

Cosa fare in caso di panico del kernel Linux

Cos'è Bonjour sul mio computer? Guida per PC del programma Bonjour di Windows 10

Come verificare quale versione del kernel Linux sto utilizzando

Come si ottiene Ubuntu per eseguire automaticamente un programma ogni volta che lo schermo è sbloccato?

Che cos'è l'inoltro IP del kernel?

Cos'è un kernel contaminato in Linux?