GNU/Linux >> Tutoriales Linux >  >> Linux

¿Qué obtendría cuando sudo un programa destructivo del kernel?

De repente me doy cuenta de lo fácil que será para un sudoer para bloquear el núcleo, así que probé algo como esto:

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

Comprensiblemente, sin sudo , ejecutar el programa resulta en una falla de segmento. Sin embargo , no obtuve NADA cuando se ejecuta a través de sudo ./a.out ! Incluso el hello world en la primera línea se suprime sin ningún error o advertencia.

¿Alguien puede explicar qué está pasando?

Respuesta aceptada:

Por supuesto, no bloqueará el kernel, está escribiendo en el espacio de memoria virtual de su propio programa, no en el real espacio de memoria del núcleo.

Obtenga más información sobre la memoria virtual aquí

PD:

Por qué printf no imprime nada? De forma predeterminada, la salida estándar tiene un búfer de línea y su hello world no contiene un separador de línea.

Entonces, si el programa falla, no observará esa salida (intente usar puts o agregando un \n en tu mensaje)


Linux
  1. Linux:¿qué hacer cuando un escritorio Linux se congela?

  2. ¿Qué hace un programa cuando se envía una señal Sigkill?

  3. ¿Cómo puedo obtener lo que ha devuelto mi función principal?

  4. ¿Cuál es el estado de registro predeterminado cuando se inicia el programa (asm, linux)?

  5. GDB:comando indefinido de símbolos lx

Qué hacer en caso de pánico en el kernel de Linux

¿Qué es Bonjour en mi computadora? Guía para PC del programa Bonjour de Windows 10

Cómo comprobar qué versión del kernel de Linux estoy ejecutando

¿Cómo consigues que Ubuntu ejecute automáticamente un programa cada vez que se desbloquea la pantalla?

¿Qué es el reenvío de IP del kernel?

¿Qué es un kernel contaminado en Linux?