gpt4 book ai didi

assembly - 当 x86-64 linux 内核需要运行 x86-32 程序时,它做了什么?

转载 作者:行者123 更新时间:2023-12-02 01:02:51 24 4
gpt4 key购买 nike

由于 x86-64 CPU 可以直接运行 x86-32 代码,写入 eax 会将 rax 的高位清零,因此系统调用号将是正确的.要运行 x86-32 程序,内核还需要做哪些其他工作?

最佳答案

What other job does the kernel have to do to run x86-32 program?

所有 64 位参数都需要拆分(例如,传入 edx:eax 而不仅仅是 rax)。用于调用内核 API 的机制完全不同(int 0x80syscall)。堆栈布局(这对于将信号发送回用户空间信号处理程序之类的事情很重要)是不同的。虚拟内存管理必须意识到用户空间不能使用 64 位指针。 TLS 使用不同的段寄存器(gs 用于 32 位,fs 用于 64 位)。

大多数情况下,它的不同之处足以让您最终得到完全独立的系统调用入口/导出和调度代码(其中两个接口(interface)在处理参数和调用约定后调用相同的内部函数)。

关于assembly - 当 x86-64 linux 内核需要运行 x86-32 程序时,它做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49356702/

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