为什么 IDA 在某些 linux 二进制文件中为 main 函数显示三个参数而不是两个?

逆向工程 艾达 x86 小精灵
2021-07-04 18:46:57

所以我正在反转一个 ELF‌ 二进制文件,现在根据我对 C 的了解,main 函数有两个参数,argc 和 argv

但是当我反编译它们时,我正在逆向的一些 linux 二进制文件有 3 个!一个 int 和另外两个是 char**,我假设第二个是 argv 但最后一个是什么?

一个例子是 CTF 的二进制文件:‌

https://github.com/SPRITZ-Research-Group/ctf-writeups/tree/master/0x00ctf-2017/reverse/challenge-000-50

1个回答

第三个是该程序有权访问的环境变量数组。如果您阅读execve的文档,它的内容如下:

被调用程序的主函数可以访问参数向量和环境,当它定义为:

int main(int argc, char *argv[], char *envp[])

但是请注意,POSIX.1 中没有指定使用 main 函数的第三个参数;根据 POSIX.1,应通过外部变量environ(7) 访问环境。