您的位置:首页 > 其它

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

2007-05-28 13:39 597 查看
ELF header(ELF头部)

Program header table(程序头表)

Segment1(段1)

Segment2(段2)

………

Sengmentn(段n)

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

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

[align=left]地址[/align]
[align=left]作用[/align]
[align=left]说明[/align]
[align=left]>=0xc000 0000[/align]
[align=left]内核虚拟存储器[/align]
[align=left]系统保留区[/align]
[align=left]<0xc000 0000[/align]
[align=left]Stack(用户栈)[/align]
[align=left]%EBP,%ESP[/align]
[align=left] [/align]
[align=left]↓[/align]
[align=left] [/align]
[align=left]↑[/align]
[align=left] [/align]
[align=left]空闲/动态库也放在此[/align]
[align=left]>=0x4000 0000[/align]
[align=left]文件映射区[/align]
[align=left] 只映射,page fault后加载[/align]
[align=left]<0x4000 0000[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]↑[/align]
[align=left] [/align]
[align=left]空闲[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]Heap(运行时堆)[/align]
[align=left]通过brk/sbrk系统调用扩大堆,向上增长(malloc)。[/align]
[align=left] [/align]
[align=left].data、.bss(读写段)[/align]
[align=left]可执行文件中获取,重定位[/align]
[align=left]>=0x0804 8000[/align]
[align=left].init、.text、.rodata(只读段)[/align]
[align=left]可执行文件中获取,重定位[/align]
[align=left]<0x0804 8000[/align]
[align=left]保留区域[/align]
[align=left] [/align]
C程序的入口点是_start,这段启动代码是在目标文件ctrl.o中定义的。启动代码中首先调用初始化函数,然后调用atexit函数,用于注册在exit函数被调用(程序退出)时应该被调用的函数。最后,启动代码调用main函数,在main函数返回后,调用系统调用_exit(),将控制返回给操作系统。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐