|
发表于 2003-6-28 19:11:50
|
显示全部楼层
对于系统的启动函数,我的理解是一个二进制代码在装入内存执行需要启动函数来做一些进程的初始化工作。由于一个进程只需要初始化一次,因此库文件不能有初始化的部分。在ELF格式文件中有一个.init段,就是做这个的。
- 在ELF系统上,一个程序是由可执行文件或者还加上一些共享object文件组成。
- 为了执行这样的程序,系统使用那些文件创建进程的内存映象。进程映象
- 有一些段(segment),包含了可执行指令,数据,等等。为了使一个ELF文件
- 装载到内存,必须有一个program header(该program header是一个描述段
- 信息的结构数组和一些为程序运行准备的信息)。
- 一个段可能有多个section组成.这些section在程序员角度来看更显的重要。
- 。。。
- .init
- 该section保存着可执行指令,它构成了进程的初始化代码。
- 因此,当一个程序开始运行时,在main函数被调用之前(c语言称为
- main),系统安排执行这个section的中的代码。
- .init和.fini sections的存在有着特别的目的。假如一个函数放到
- .init section,在main函数执行前系统就会执行它。同理,假如一
- 个函数放到.fini section,在main函数返回后该函数就会执行。
- 该特性被C++编译器使用,完成全局的构造和析构函数功能。
- 当ELF可执行文件被执行,系统将在把控制权交给可执行文件前装载所以相关
- 的共享object文件。构造正确的.init和.fini sections,构造函数和析构函数
- 将以正确的次序被调用。
复制代码
原文在这里:
http://www.linuxsir.cn/forum.php?mod=viewthread&tid=48381 |
|