当前位置:Linux教程 - Linux资讯 - 怎样在内核中访问某一个进程的内存并作修改?

怎样在内核中访问某一个进程的内存并作修改?

通过 /dev/mem 设备文件和 mmap 系统调用,可以将线性地址的物理内存映射到进程的地址空间,然后就可以访问这段内存了。比如,标准 VGA 16 色模式的实模式地址是 A000:0000,而线性地址则是 A00000。设定显存大小为 0x10000,则可以如下操作。

mem_fd = open ("/dev/mem", O_RDWR);

vga_mem = mmap (0, 0x10000, PROT_READ PROT_WRITE, MAP_SHARED, mem_fd, 0xA00000);

close (mem_fd);

然后直接对 vga_mem 进行访问,就可以了。当然,如果是操作 VGA 显卡,还要获得 I/O 端口的访问权限,以便进行直接的 I/O 操作,用来设置模式、调色板、选择位面等等。

在工控领域中还有一种常用的方法,用来在内核和应用程序之间高效传递数据:

1. 假定系统有 64M 物理内存,则可以通过 lilo 通知内核只使用 63M,而 保留 1M 物理内存作为数据交换使用(使用 mem=63M 标记)。 2. 然后打开 /dev/mem 设备,并将 63M 开始的 1M 地址空间映射到进程 的地址空间。

(出处:http://www.sheup.com)