怎样在内核中访问某一个进程的内存并作修改?
1个回答
展开全部
比如,标准 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 地址空间映射到进程 的地址空间。(出处:清风软件下载学院)
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 地址空间映射到进程 的地址空间。(出处:清风软件下载学院)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询