GETAUXVAL - Linux手册页
Linux程序员手册 第3部分
更新日期: 2020-06-09
名称
getauxval-从辅助向量中检索值
语法
#include <sys/auxv.h> unsigned long getauxval(unsigned long type);
说明
getauxval()函数从辅助向量中检索值,该向量是内核的ELF二进制加载器用来在执行程序时将某些信息传递到用户空间的机制。
辅助向量中的每个条目都包含一对值:一个用于标识该条目表示的类型,以及一个用于该类型的值。给定参数类型,getauxval()返回相应的值。
下表中列出了每种类型返回的值。并非所有类型的值都存在于所有体系结构上。
- AT_BASE
- 程序解释器(通常是动态链接器)的基地址。
- AT_BASE_PLATFORM
- 指向字符串的指针(仅适用于PowerPC和MIPS)。在PowerPC上,这标识了真正的平台。可能与AT_PLATFORM不同。在MIPS上,这标识ISA级别(从Linux 5.7开始)。
- AT_CLKTCK
- times(2)计数的频率。也可以通过sysconf(_SC_CLK_TCK)获得该值。
- AT_DCACHEBSIZE
- 数据缓存块大小。
- AT_EGID
- 线程的有效组ID。
- AT_ENTRY
- 可执行文件的入口地址。
- AT_EUID
- 线程的有效用户标识。
- AT_EXECFD
- 程序的文件描述符。
- AT_EXECFN
- 指向包含用于执行程序的路径名的字符串的指针。
- AT_FLAGS
- 标志(未使用)。
- AT_FPUCW
- 使用的FPU控制字(仅SuperH架构)。这提供了有关内核执行的FPU初始化的一些信息。
- AT_GID
- 线程的真实组ID。
- AT_HWCAP
- 架构和依赖于ABI的位掩码,其设置指示详细的处理器功能。位掩码的内容取决于硬件(例如,请参阅内核源文件arch / x86 / include / asm / cpufeature.h,以获取有关Intel x86体系结构的详细信息;返回的值是I / O的第一个32位字)。此处描述的数组)。可以通过/ proc / cpuinfo获得该信息的人类可读版本。
- AT_HWCAP2(since glibc 2.18)
- 有关处理器功能的其他与机器有关的提示。
- AT_ICACHEBSIZE
- 指令缓存块大小。
- AT_L1D_CACHEGEOMETRY L1数据高速缓存的几何形状,其后16位以字节为单位的高速缓存行大小和后16位以高速缓存关联性进行编码。关联性是这样的:如果N是16位值,则将高速缓存设置为N方式关联。
- AT_L1D_CACHESIZE
- L1数据缓存大小。
- AT_L1I_CACHEGEOMETRY
- L1指令缓存的几何,编码方式与AT_L1D_CACHEGEOMETRY相同。
- AT_L1I_CACHESIZE
- L1指令缓存大小。
- AT_L2_CACHEGEOMETRY
- L2缓存的几何,编码方式与AT_L1D_CACHEGEOMETRY相同。
- AT_L2_CACHESIZE
- L2缓存大小。
- AT_L3_CACHEGEOMETRY
- L3缓存的几何,编码方式与AT_L1D_CACHEGEOMETRY相同。
- AT_L3_CACHESIZE
- L3缓存大小。
- AT_PAGESZ
- 系统页面大小(与sysconf(_SC_PAGESIZE)返回的值相同)。
- AT_PHDR
- 可执行文件的程序头的地址。
- AT_PHENT
- 程序头条目的大小。
- AT_PHNUM
- 程序头的数量。
- AT_PLATFORM
- 指向字符串的指针,该字符串标识程序在其上运行的硬件平台。动态链接器在解释rpath值时使用它。
- AT_RANDOM
- 包含随机值的16个字节的地址。
- AT_SECURE
- 如果应安全对待此可执行文件,则其值为非零值。最常见的是,非零值表示该进程正在执行一个set-user-ID或set-group-ID二进制文件(因此其实际和有效的UID或GID彼此不同),或者它通过执行二进制文件获得了功能。具有功能的文件(请参阅功能(7))。或者,Linux安全模块可以触发非零值。当该值不为零时,动态链接器将禁用某些环境变量的使用(请参阅ld-linux.so(8)),并且glibc会更改其行为的其他方面。 (另请参见secure_getenv(3)。)
- AT_SYSINFO
- vDSO中系统调用功能的入口点。在所有架构上都不存在/不需要(例如,在x86-64上不存在)。
- AT_SYSINFO_EHDR
- 包含内核创建的虚拟动态共享对象(vDSO)的页面的地址,以提供某些系统调用的快速实现。
- AT_UCACHEBSIZE
- 统一缓存块大小。
- AT_UID
- 线程的真实用户ID。
返回值
成功时,getauxval()返回与type对应的值。如果找不到类型,则返回0。
错误说明
- ENOENT(since glibc 2.19)
- 在辅助向量中找不到对应于类型的条目。
版本
getauxval()函数已在版本2.16中添加到glibc。
属性
有关本节中使用的术语的说明,请参见attribute(7)。
Interface | Attribute | Value |
getauxval() | Thread safety | MT-Safe |
遵循规范
此函数是非标准的glibc扩展。
备注
辅助向量中信息的主要使用者是动态链接器ld-linux.so(8)。辅助向量是一种方便高效的快捷方式,它允许内核传达动态链接程序通常或始终需要的一组标准信息。在某些情况下,可以通过系统调用获得相同的信息,但是使用辅助向量更便宜。
辅助向量位于进程地址空间中的参数列表和环境的上方。运行程序时,可以通过设置LD_SHOW_AUXV环境变量来查看提供给程序的辅助向量:
$ LD_SHOW_AUXV=1 sleep 1
可以通过/ proc / [pid] / auxv获得任何进程的辅助向量(取决于文件许可权);有关更多信息,请参见proc(5)。
BUGS
在glibc 2.19中添加ENOENT错误之前,没有任何方法可以明确地区分找不到类型的情况和与类型对应的值为零的情况。
另外参见
secure_getenv(3),vdso(7),ld-linux.so(8)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。