2011-03-07 50 views
6

有沒有人成功地在Linux內核2.6中映射/ proc/pid/mem文件?我得到一個ENODEV(沒有這樣的設備)錯誤。我的電話是這樣的:mmap on/proc/pid/mem

char * map = mmap(NULL, PAGE_SIZE, PROT_READ, MAP_SHARED, mem_fd, offset); 

而且我通過查看在/ proc/PID/maps文件在調試時,當執行到該調用,偏移具有堆棧減去PAGE_SIZE頂部的值來進行。我也已經通過ptrace驗證過mmap正在將errno設置爲ENODEV。

回答

17

請參閱proc_mem_operations in /usr/src/linux/fs/proc/base.c/proc/.../mem不支持mmap

+0

非常感謝!我的Ubuntu x86_64中似乎沒有這個base.c文件 - 我的/ usr/src目錄是空的。你在運行什麼發行版? – 2011-03-08 21:59:23

+0

@Amittai:你可以直接從kernel.org安裝'linux-source'軟件包或者直接獲取Linux內核源代碼。 – ephemient 2011-03-08 22:29:41

+0

錯誤404上提到的鏈接:( – ashish 2015-10-27 07:40:36