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

.init_array段注册函数传入参数的官方文档查询

.init_array段注册函数调用参数的官方依据说明

核心问题

目前业界存在广泛流传的说法:注册到.init_array段的函数会和main()一样接收命令行参数argc、argv以及环境变量参数,但暂未找到正式发布的官方文档可以佐证这一结论。
需要明确的是:函数本身并非存储在.init_array段中,而是将指向该函数的指针注册到该段完成声明,程序启动时由加载器的迭代逻辑遍历该段并调用所有注册函数。
提问者的核心诉求为:获取加载器调用.init_array中注册函数时传入的参数列表的官方文档说明,确保生产环境落地的方案不存在未定义行为风险。
提问者的使用场景为:需要在动态库中以隐蔽、通用且安全的方式修改命令行参数,需要直接访问内存中真实的参数数据,不采用读取/proc/self/路径的方案。

现有公开资料排查结果

  • ELF官方规范、GCC官方文档均未提及该调用约定的参数定义
  • Oracle公开的Solaris系统相关开发文档仅说明.init_array段的函数会在程序启动阶段被调用,未明确具体传入的参数列表
  • 现有公开技术讨论也未给出该调用约定的官方文档出处

现有实现侧佐证

目前可查的GNU libc实现历史中,该调用逻辑在BZ #974补丁中完成过变更,提交记录为2005-04-13由H.J. Lu提交,记录在glibc的ChangeLog.old/ChangeLog.16中:

  • 该补丁的相关说明证明glibc维护者明确知晓向.init_array注册函数传递argc/argv/env参数的逻辑,并非偶然的实现细节
  • 该补丁将该特性扩展到了主可执行文件的.init_array注册函数中,也证明该逻辑在此补丁发布之前已经对动态库场景生效

注意:该调用约定仅在GNU libc实现下得到验证,其他libc实现是否遵循该模式暂无统一说明,跨平台使用存在兼容性风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:45:01