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。)