命令行参数在哪里?

时间:2016-01-29 00:02:26

标签: c linux memory

众所周知,C中主要功能的原型是int main(int argc, char **argv)。 argv数组指向的那些字符串在哪里?它们属于哪个内存段?数据,堆栈还是堆?

感谢。

1 个答案:

答案 0 :(得分:4)

在Linux下,程序启动时它们就在堆栈中,指针本身和它们指向的字符串。这将高于main()的堆栈帧。 C库启动代码负责将适当的指针传递给main()

您可以在fs/binfmt_elf.c函数的create_elf_tables()中找到设置新程序堆栈的内核代码,包括参数和其他所有内容。

(有趣的事实我刚刚学到:在堆栈上你可以找到16个随机字节,由内核放置exec时间,为你的RNG播种提供便利。万一你不想要打开/dev/urandom的麻烦。)