歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> Linux文化 >> 怎樣在內核中訪問某一個進程的內存並作修改?

怎樣在內核中訪問某一個進程的內存並作修改?

日期:2017/2/27 11:57:15   编辑: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