根据图像,堆栈在启动时填充有辅助 vector 条目。
我以前不知道。
我如何访问/打印它们?
int main(int argc, char *argv[], char *envp[]);
这是否意味着 main
有一个隐藏的第四个参数?
最佳答案
辅助 vector 位于环境 vector 末尾的后面,可以(根据 POSIX)作为 extern char **environ;
访问。 environ
指向指向环境变量的 char *
指针的空指针终止数组。遍历环境,直到到达 NULL
,然后进一步推进一个元素并将结果转换为您想要用来访问辅助 vector 的任何类型。就个人而言,我将其视为成对出现的 size_t
或 uintptr_t
值的数组,因为这比 elf.h
更容易和更便携> Elf32_auxv_t
和 Elf64_auxv_t
类型(无论您是为 32 位还是 64 位目标构建,这都要求您进行特殊处理)。
请注意,辅助 vector 的存在和位置并未由 POSIX 指定,但这是它们在任何使用辅助 vector 的基于 ELF-ABI 的实现中的位置。
关于c - 如何访问/打印 main 中的辅助 vector 条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7244991/