4

我有一个用户模式进程和内核模块。现在我想从内核读取用户模式进程的某些区域,但有一个问题:没有用户模式内存的复制和 VA 的简单访问。所以我们有:目标进程的task_struct、其他相关结构(如mm_struct、vma_struct)和我想读取的虚拟地址(如0x0070abcd)或者以某种方式映射到我的内核模块。

我可以使用 get_user_pages 获取所需内存区域的页面列表,但接下来呢?我应该以某种方式将页面映射到内核中,然后尝试将它们作为连续内存区域读取还是有更好的解决方案?

4

1 回答 1

1

问题是“查看”用户空间需要锁定大量内容。因此,最好做一个简短的副本,而不是将所有内容锁定任意时间。您的用户空间进程可能没有被 VM 映射到当前 CPU。事实上,它可能被完全换出到磁盘,在另一个 CPU 上运行,在它自己的内核调用中,等等。

Linux 内核:copy_from_user - 带有指针的结构

于 2013-04-15T00:36:46.400 回答