How to access(if possible) kernel space from user space?

前端 未结 3 1832
你的背包
你的背包 2020-11-29 00:44

How exactly is user memory and kernels memory differentiated inside the Linux kernel(in terms of giving security to kernel space)?

What are

3条回答
  •  暖寄归人
    2020-11-29 01:04

    What are the different ways I can write in kernel address space from user space?

    I'm not sure if there're other methods, but you can access physical memory using /dev/mem & system call mmap().

    /dev/mem is a character device file that is an image of the main memory of the computer. It may be used, for example, to examine (and even patch) the system. Byte addresses in mem are interpreted as physical memory addresses.

    more on /dev/mem: http://linux.about.com/library/cmd/blcmdl4_mem.htm

    more on mmap(): http://linux.die.net/man/2/mmap

    You can use the mmap() to map a section of /dev/mem and use in your user program. A brief example code:

    #define MAPPED_SIZE //place the size here
    #define DDR_RAM_PHYS  //place the physical address here
    
    int _fdmem;
    int *map = NULL;
    const char memDevice[] = "/dev/mem";
    
    /* open /dev/mem and error checking */
    _fdmem = open( memDevice, O_RDWR | O_SYNC );
    
    if (_fdmem < 0){
    printf("Failed to open the /dev/mem !\n");
    return 0;
    }
    else{
    printf("open /dev/mem successfully !\n");
    }
    
    /* mmap() the opened /dev/mem */
    map= (int *)(mmap(0,MAPPED_SIZE,PROT_READ|PROT_WRITE,MAP_SHARED,_fdmem,DDR_RAM_PHYS));
    
    /* use 'map' pointer to access the mapped area! */
    for (i=0,i<100;i++)
    printf("content: 0x%x\n",*(map+i));
    
    /* unmap the area & error checking */
    if (munmap(map,MAPPED_SIZE)==-1){
    perror("Error un-mmapping the file");
    }
    
    /* close the character device */
    close(_fdmem);
    

    However, please make sure the area you are mapping is not used, for example by the kernel, or it will make your system crash/hang, and you will be forced to reboot using hardware power button.

    Hope it helps.

提交回复
热议问题