linux - 将数据从 32 位用户程序传递到 64 位 linux

标签 linux linux-kernel 32bit-64bit x86-64

如果一个32位的用户程序运行在64位的linux内核上, 并希望将指向用户空间中数据的指针传递给内核代码。如果 在用户空间和内核空间中定义了相同的结构。 内核空间代码能否正确解码数据? 如果是,它是如何完成的?

最佳答案

是的。您使用的 32 位地址(或您使用的任何地址,在 64 位中是相同的)是虚拟地址。换句话说,您使用并传递给任何人(包括内核)的任何类型的地址都是“幻想”的东西,它不以任何明显的方式对应于真实地址。除了虚拟地址,您什么都不知道。

为了使这项工作正常进行,内核(通常在 MMU 的帮助下)定期将虚拟地址转换为物理地址。为此,每个进程都有一个表,其中包含对该进程有效的所有页面(由内核管理)。
几乎在每次页面错误时,内核都会将虚拟地址映射和重新映射到现有或不存在的位置(基本上,一直如此)。

内核因此当然可以为您传递给它的任何指针做任何可能需要的翻译,只要是这种情况。

关于linux - 将数据从 32 位用户程序传递到 64 位 linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22405900/

相关文章:

gcc - 32 位构建于 64 位 CentOS 5 主机上

c# - 使用 MONO 在 LINUX 中开发类似于 Windows 的服务?

android - 编译内核时出错: missing double arithmetic?

C++ Visual Studio 2008,将项目从 64 位移动到 32 位

linux - QEMU 中的滚动选项

linux-kernel - 内核配置文件中的 m 是什么意思?

windows - Windows 可以处理跨越 32 位/64 位边界的继承吗?

php - 是否有可能在长时间运行的 PHP 进程中捕获/处理/检测系统时间何时更改?

python - 如何在 Linux 上安装 2 个 Anacondas(Python 2.7 和 3.5)?

c - 如何在 Linux 上使用 plock(HPUX)