众所周知,C中主要功能的原型是int main(int argc, char **argv)
。 argv数组指向的那些字符串在哪里?它们属于哪个内存段?数据,堆栈还是堆?
感谢。
答案 0 :(得分:4)
在Linux下,程序启动时它们就在堆栈中,指针本身和它们指向的字符串。这将高于main()
的堆栈帧。 C库启动代码负责将适当的指针传递给main()
。
您可以在fs/binfmt_elf.c
函数的create_elf_tables()
中找到设置新程序堆栈的内核代码,包括参数和其他所有内容。
(有趣的事实我刚刚学到:在堆栈上你可以找到16个随机字节,由内核放置exec
时间,为你的RNG播种提供便利。万一你不想要打开/dev/urandom
的麻烦。)