如何访问/打印 main 中的辅助向量条目?

lex*_*xer 6 c linux stack

在此输入图像描述

根据该图像,堆栈在启动时填充有辅助向量条目。

我以前不知道。

我如何访问/打印它们?

int main(int argc, char *argv[], char *envp[]);
Run Code Online (Sandbox Code Playgroud)

这是否意味着main有一个隐藏的第四个参数?

jwe*_*ich 0

您的问题的答案是特定于系统的。C ISO 仅定义了该main函数的两个参数。附加参数不是标准的,应被视为扩展。引用维基百科的Main 函数

\n\n
\n

参数 argc(参数计数)和 argv(参数向量)[1] 分别给出程序命令行参数的数量和值。argc 和 argv 的名称可以是 C 中的任何有效标识符,但使用这些名称是常见的约定。在 C++ 中,如果需要严格遵守,则应按字面意思理解名称,并且省略参数列表中的“void”。[2] C 和 C++ 标准也允许其他依赖于平台的格式,但在 C++ 中返回类型必须保持 int;例如,Unix(尽管不是 POSIX.1)和 Microsoft Windows 有第三个参数,给出程序的环境,否则可以通过 stdlib.h 中的 getenv 进行访问:

\n
\n\n
int main(int argc, char **argv, char **envp)\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

Mac OS X 和 Darwin 有第四个参数,其中包含操作系统提供的任意信息,例如执行二进制文件的路径:[3]

\n
\n\n
int main(int argc, char **argv, char **envp, char **apple)\n
Run Code Online (Sandbox Code Playgroud)\n\n

AMD64 ABI

\n\n

根据System V ABI for AMD64, Draft 0.99.5,辅助向量条目的类型为auxv_t,如下所示:

\n\n

AMD64 ABI 使用 \xef\xac\x81gure 3.11 中的辅助向量类型 de\xef\xac\x81ned。

\n