现在的位置: 首页 > 综合 > 正文

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

2014年01月06日 ⁄ 综合 ⁄ 共 642字 ⁄ 字号 评论关闭
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(),将控制返回给操作系统。

 

抱歉!评论已关闭.