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

系统调用__open中EAX寄存器值与预期不符的技术疑问

问题解答
  • 首先纠正你的误解:0x101不是内存地址,它是x86_64架构Linux下openat系统调用的编号(十进制257)。
  • 你看到的现象源于两个核心要点:
    1. glibc的封装逻辑:标准库的fopen函数底层不会直接触发open系统调用,而是调用glibc内部的__open封装函数。这个函数会完成参数预处理(比如默认权限设置、路径解析),最终调用更安全的openat系统调用,而非传统的open。
    2. 系统调用号的架构差异:你记忆中open对应EAX值0x02是32位x86架构的系统调用号;在x86_64架构下,open的系统调用号确实也是0x02,但openat的编号是0x101,这就是你反汇编时看到的数值。
  • 额外说明:openat相比open的核心优势是支持基于文件描述符的相对路径解析,能规避部分文件系统竞态条件,这也是现代glibc优先选用它的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:15:53