access_process_vm() 在 Linux 中如何工作?

access_process_vm() 在 Linux 中如何工作?

AFAIK,ptrace 系统调用用于access_process_vm从其他进程读取数据。但是,不同进程的地址空间是隔离的,这是如何实现的呢?

答案1

进程的地址空间确实是相互隔离的,但它们并没有与内核隔离。内核始终知道所有活动进程的内存布局。access_process_vm工作原理如下:

在 64 位平台上,一般情况下 (IE该页不是 I/O 重映射页),最后一步中的映射依赖于内核的直接物理映射:内核可以直接访问所有物理内存。在 32 位平台上HIGHMEM,这可能涉及创建特定的映射。 (后者是为什么kmap在上面的最后一个链接中定义 的原因highmem.h- 它只需要HIGHMEM。)

相关内容