歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> 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 地址空間映射到進程 的地址空間。




Copyright © Linux教程網 All Rights Reserved