【发布时间】:2014-04-19 19:08:18
【问题描述】:
如果 32 位用户程序在 64 位 Linux 内核上运行, 并希望将指向用户空间中数据的指针传递给内核代码。如果 在用户空间和内核空间都定义了相同的结构。 内核空间代码能否正确解码数据? 如果是的话怎么做?
【问题讨论】:
标签: linux linux-kernel 32bit-64bit x86-64
如果 32 位用户程序在 64 位 Linux 内核上运行, 并希望将指向用户空间中数据的指针传递给内核代码。如果 在用户空间和内核空间都定义了相同的结构。 内核空间代码能否正确解码数据? 如果是的话怎么做?
【问题讨论】:
标签: linux linux-kernel 32bit-64bit x86-64
是的。您使用的 32 位地址(或您使用的 any 地址,在 64 位中相同)是虚拟地址。换句话说,您使用并传递给任何人(包括内核)的任何类型的地址都是“幻想”的东西,它不以任何明显的方式对应于真实地址。除了虚拟地址,你什么都不知道。
为了完成这项工作,内核(通常在 MMU 的帮助下)例行地将虚拟地址转换为物理地址。为此,每个进程都有一个表,其中包含对该进程有效的所有页面(由内核管理)。
内核将虚拟地址映射和重新映射到几乎每个页面错误的现有或不存在的位置(基本上,一直如此)。
因此,内核当然可以执行任何您传递给它的指针可能需要的任何转换。
【讨论】: