34. x86 特定 ELF 輔助向量

本文件描述了 x86 輔助向量的語義。

34.1. 簡介

ELF 輔助向量使核心能夠有效地向用戶空間提供特定於配置的引數。 在此示例中,程式根據核心提供的大小分配備用堆疊

#include <sys/auxv.h>
#include <elf.h>
#include <signal.h>
#include <stdlib.h>
#include <assert.h>
#include <err.h>

#ifndef AT_MINSIGSTKSZ
#define AT_MINSIGSTKSZ       51
#endif

....
stack_t ss;

ss.ss_sp = malloc(ss.ss_size);
assert(ss.ss_sp);

ss.ss_size = getauxval(AT_MINSIGSTKSZ) + SIGSTKSZ;
ss.ss_flags = 0;

if (sigaltstack(&ss, NULL))
     err(1, "sigaltstack");

34.2. 公開的輔助向量

AT_SYSINFO 用於定位 vsyscall 入口點。 它在 64 位模式下不匯出。

AT_SYSINFO_EHDR 是包含 vDSO 的頁面的起始地址。

AT_MINSIGSTKSZ 表示核心向用戶空間傳遞訊號所需的最小堆疊大小。 AT_MINSIGSTKSZ 包含核心為適應當前硬體配置的使用者上下文而消耗的空間。 它不包含後續的使用者空間堆疊消耗,使用者必須新增該消耗。 (例如,在上面,使用者空間將 SIGSTKSZ 新增到 AT_MINSIGSTKSZ。)