You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux 64位系统下32位进程调用系统API的实现方式探讨

x86_64架构下Linux的系统调用机制差异

64位进程的系统调用流程

x86_64架构的Linux 64位系统中,用户态和内核态的代码段、数据段一共使用4个段描述符。
64位进程调用系统API时,会在ring 3(用户态)代码段执行syscall指令进入内核态;内核处理完成后,通过sysret指令将控制权返回给进程,同时把CS段选择器切换回指向64位用户态代码段。

32位进程的系统调用方式

根据Intel SDM文档,syscall指令在IA-32e兼容模式下不受支持,因此Linux下32位进程采用传统的int 0x80中断指令触发系统调用:

  • 执行int 0x80会从ring 3切换到ring 0,内核处理完请求后通过iret指令返回用户态,同时恢复对应的段选择器与栈环境。
  • 这和Windows 64位系统的实现不同:Windows通过Wow64子系统支持32位应用,调用系统API时会先在用户态将CPU从32位兼容模式切换到64位模式,实际以64位模式调用系统API,返回后再切回兼容模式。

内容的提问来源于stack exchange,提问作者CarloC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 16:42:04