我想从Linux内核(通过用户空间或内核空间)访问(读写)所有RAM(使用物理地址),可以吗?
用户空间有哪些可能性和限制?
我们可以在多大程度上使用可加载的内核模块来实现这一点?
谢谢和问候,
韦伦德拉纳
最佳答案
您可以使用mmap从用户空间访问物理地址。
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#define PHY_ADDR 0x807feff
int main()
{
int i;
unsigned int *addr;
int fd = open( "/dev/mem", O_RDWR | O_SYNC );
if( fd < 0 )
{
perror( "Error opening file /dev/mem" );
return 1;
}
addr = (unsigned int *) mmap( 0, getpagesize(), PROT_READ | PROT_WRITE, MAP_SHARED, fd, PHY_ADDR );
if( addr == NULL )
{
perror( "Error mapping" );
return 1;
}
for( i = 0; i < 256 / 4; i++ )
printf( "addr: %X\tval: %X\n", addr + i, *( addr + i ) );
if( munmap( addr, getpagesize() ) == -1 )
{
perror( "Error unmaping" );
return 1
}
close( fd );
return 0;
}
关于linux - Linux上的RAM访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35307264/