ELF文件格式 程序加载 执行 图示 OBJDUMP

来源:互联网 发布:淘宝店铺装修客服代码 编辑:程序博客网 时间:2024/05/21 23:18
ELF header(ELF头部)

Program header table(程序头表)

Segment1(段1)

Segment2(段2)

………

Sengmentn(段n)

Setion header table(节头表,可选)//描述了映射加载关系,可由OBJDUMP查看objdump -h 我的程序

Unix系统在可执行文件的加载过程中,除了读取必要的头部信息,并没有任何从磁盘到存储器的数据拷贝,只是简单进行映射,知道CPU访问一个被映射的虚拟页产生缺页异常后,才进行拷贝。  

 

地址
作用
说明
>=0xc000 0000
内核虚拟存储器
系统保留区
<0xc000 0000
Stack(用户栈)
%EBP,%ESP
 
 
 
空闲/动态库也放在此
>=0x4000 0000
文件映射区
 只映射,page fault后加载
<0x4000 0000
 
 
 
空闲
 
 
Heap(运行时堆)
通过brk/sbrk系统调用扩大堆,向上增长(malloc)。
 
.data.bss(读写段)
可执行文件中获取,重定位
>=0x0804 8000
.init.text.rodata(只读段)
可执行文件中获取,重定位
<0x0804 8000
保留区域
 

C程序的入口点是_start,这段启动代码是在目标文件ctrl.o中定义的。启动代码中首先调用初始化函数,然后调用atexit函数,用于注册在exit函数被调用(程序退出)时应该被调用的函数。最后,启动代码调用main函数,在main函数返回后,调用系统调用_exit(),将控制返回给操作系统。

 

原创粉丝点击