x86-64 linux内核在需要运行x86-32程序时会做什么?

时间:2018-03-19 06:03:01

标签: assembly x86-64

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

1 个答案:

答案 0 :(得分:2)

  

内核还需要做什么工作才能运行x86-32程序?

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

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

相关问题