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)