gpt4 book ai didi

c - 为什么 32 位内核可以运行 64 位二进制文​​件?

转载 作者:太空狗 更新时间:2023-10-29 16:24:18 29 4
gpt4 key购买 nike

在我的 OS X 机器上,内核是 32 位二进制文​​件,但它可以运行 64 位二进制文​​件。这是如何工作的?

cristi:~ diciu$ file ./a.out
./a.out: Mach-O 64-bit executable x86_64
cristi:~ diciu$ file /mach_kernel
/mach_kernel: Mach-O universal binary with 2 architectures
/mach_kernel (for architecture i386): Mach-O executable i386
/mach_kernel (for architecture ppc): Mach-O executable ppc
cristi:~ diciu$ ./a.out
cristi:~ diciu$ echo $?
1

最佳答案

当 CPU 陷入内核上下文时,它可以从 64 位执行模式切换到 32 位,并且仍然可以构建 32 位内核来理解从 64 位用户空间应用程序传入的结构。

MacOS X 内核不会直接从用户应用程序中取消引用指针,因为它驻留在自己独立的地址空间中。例如,ioctl 调用中的用户空间指针必须首先解析为其物理地址,然后在内核地址空间中创建一个新的虚拟地址。 ioctl 中的指针是 64 位还是 32 位并不重要,无论哪种情况,内核都不会直接取消引用它。

因此混合 32 位内核和 64 位二进制文​​件是可行的,反之亦然。您不能做的是将 32 位库与 64 位应用程序混合使用,因为它们之间传递的指针会被截断。 MacOS X 在每个版本中都提供更多 32 位和 64 位版本的框架。

关于c - 为什么 32 位内核可以运行 64 位二进制文​​件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49934/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com