命令行参数在哪里?
众所周知,C中main funcion的原型是int main(int argc, char **argv)
。 argv数组指向的那些字符串在哪里? 他们在哪个内存段? 数据,堆栈还是堆?
谢谢。
在Linux下,它们在程序启动时位于堆栈上,指针本身和它们指向的字符串。 这将会在main()
的堆栈框架之上。 C库启动代码负责将适当的指针传递给main()
。
您可以在函数create_elf_tables()
中的fs/binfmt_elf.c
中找到设置新程序堆栈的内核代码,包括参数和其他所有内容。
(有趣的是,我刚刚学到了:在堆栈中可以找到16个随机字节,由内核在exec
时放在那里,为了方便RNG播种,以防万一你不想开启麻烦/dev/urandom
。)