11 运行库

本章从程序创世开始,接触到程序背后另一类默默服务的团体,它们能够使得程序正常启动,使得我们熟悉的函数发挥作用,它们就是程序的运行库。
11.1入口函数和程序初始化
11.1.1程序从main开始吗
这里写图片描述
11.1.2入口函数如何实现
glibc的程序入口为_start:
这里写图片描述

ebp设为0正好可以体现出这个最外层函数的尊贵地位

pop esi及mov esp,ecx;调用_start前,装载器把用户参数和环境变量压入栈;按照压栈方法,实际栈顶元素是argc,而接着是argv和环境变量的数组。下图给出栈布局,虚线箭头是执行pop esi之前的栈顶:
这里写图片描述
三条指令后,esi、ecx分别指向argc和argv及环境变量数组。
实际执行代码的函数是__libc_start_main:
这里写图片描述
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/xiziyunqi/article/details/78406774
今日推荐