GNU/Linux >> Znalost Linux >  >> Linux

Co bych získal, když Sudo Program destruktivní jádra?

Najednou mi přijde, jak snadné to pro sudoera bude k pádu jádra, tak jsem zkusil něco takového:

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

Pochopitelně bez sudo , spuštění programu ukáže chybu segmentu. Nicméně , nemám NIC když jej spustíte pomocí sudo ./a.out ! Dokonce i hello world v prvním řádku je potlačeno bez jakékoli chyby nebo varování.

Může někdo vysvětlit, co se děje?

Přijatá odpověď:

Samozřejmě to nezničí jádro, zapisujete do virtuálního paměťového prostoru vašeho vlastního programu, nikoli do real paměťový prostor jádra.

Další informace o virtuální paměti naleznete zde

P.S:

Proč printf nic netiskne? Standardně je standardní výstup ukládán do vyrovnávací paměti a váš hello world neobsahuje oddělovač řádků.

Pokud se tedy program zhroutil, nebudete tento výstup pozorovat (zkuste použít puts nebo přidáním \n ve vaší zprávě)


Linux
  1. Linux – co dělat, když linuxová plocha zamrzne?

  2. Získejte „povolení odepřeno“ při přesměrování výstupu Sudo Echo „xyz“ do souboru?

  3. Jaký je ukončovací kód programu, když selžeasses()?

  1. Jak mohu získat to, co se mi vrátila hlavní funkce?

  2. Jaký je výchozí stav registru při spuštění programu (asm, linux)?

  3. Co se stane, když se vlákno rozvětvuje?

  1. Linux – Co by se stalo, kdyby pevný disk selhal, zatímco linuxové jádro běželo?

  2. Jak přimět Ubuntu, aby automaticky spustilo program pokaždé, když je obrazovka odemčena?

  3. Co dělat, když Ctrl + C nemůže zabít proces?