进程初始化后栈的结构

进程初始化后栈的结构

Content #

Linux的进程初始化后栈的结构,我们假设系统中有两个环境变量:

HOME=/home/user
PATH=/usr/bin

运行该程序的命令行是:

$ prog 123

并且假设堆栈段底部地址为0xBF802000,那么进程初始化后的堆栈就如图所示。 栈顶寄存器esp指向的位置是初始化以后堆栈的顶部,最前面的4个字节表示命令行参数的数量,例子里面是两个,即“prog”和“123”,紧接的就是分布指向这两个参数字符串的指针;后面跟了一个0;接着是两个指向环境变量字符串的指针,它们分别指向字符串“HOME=/home/user”和“PATH=/usr/bin”;后面紧跟一个0表示结束。

进程在启动以后,程序的库部分会把堆栈里的初始化信息中的参数信息传递给 main()函数,也就是我们熟知的main()函数的两个argc和argv两个参数,这两个参数分别对应这里的命令行参数数量和命令行参数字符串指针数组。

From #

程序员的自我修养