ELF学习--可执行文件
承接上一篇。我们来看看可执行文件和重定位文件的不同点。
readelf -h test

相比较重定位文件,可执行文件的ELF header中入口地址是0x8048320.而且除了section header外,还存在program header.program header起始于第52个字节,因此program header应该是紧接着ELF header。
可执行文件的ELF 布局如下:

我们来看一下0x8048320地址是什么。
objdump -d test

0x8048320是_start的地址,是程序执行开始的地方。
我们知道可重定位文件的ELF中有section的概念。但在可执行文件中变成了segment.
section和segment的关系是,一个segment是一个或多个属性类似的section合并而成。
为什么要将section进行合并呢?这样做的好处是可以减少页面碎片。可执行文件是要装载到内存中运行的。如果不进行合并,假设页面大小为4096,如果.text 为4097,.init为512,那么将占有3个页面,而合并后只有2个页面。
再看一下可执行文件的section header:
readelf -S test

由于可执行文件动态链接了libc,所以增加了许多section。而且也为.bss分配了空间。.dynamic,.dynsym,.dynstr.got,.got.plt都与动态链接相关。
通过readelf -l test查看section到segment的映射关系,

30个section映射到9个segment。在可执行文件运行时,并非所有的segment都需要装载到内存,只有“LOAD”类型的segment才需要装载。
INTERP是动态链接器的路径。
查看可执行文件的符号,readelf -s test

可执行文件的符号增加了很多,包括编译器加入的和libc的符号。main.o中调用的add不是UND类型的。而libc中的一些需要动态链接进来的符号是UND.
ELF学习--可执行文件的更多相关文章
- ELF学习--装载过程
		
当我们在linux bash下执行ELF程序时,Linux系统是怎样装载和执行的呢? 1.bash进程fork出子进程 2.在bash的子进程中调用execve系统调用来执行指定的ELF. 3.exe ...
 - ELF学习--重定位文件
		
add.c int data = 1;int bss;const int rodata = 1;int add(int num1, int num2){ int sum = 0; sum = num1 ...
 - 南京大学计算机基础 ELF和可执行文件格式
		
1.可重定位目标文件格式 主要是由ELF头,一些节比如.text节,.rodata节,.data节,.bss节等,前面是只读的,后面是可读可写的,加上一个节头表 1.1 ELF头里面主要包含了16字节 ...
 - elf 学习
		
现在我们使用 readelf 命令来查看 elfDome.out 的文件头 readelf -l elfDemo.out 使用 readelf 来查看程序头: readelf -S elfDemo.o ...
 - 20179223《Linux内核原理与分析》第八周学习笔记
		
视频学习 可执行文件是怎么得来的? .c汇编成汇编代码.asm,然后再汇编成目标码.o.然后在连接成可执行文件,然后加载到内存可执行了. 对hello.c文件预处理(cpp),预处理负责把includ ...
 - ARM学习笔记10——GNU ARM命令行工具
		
一.编译器arm-linux-gcc 1.用arm-linux-gcc编译一个程序,一般它是要经过如下步骤的: 1.1.预处理阶段 编译器把上述代码中stdio.h编译进来,使用GCC的选项-E可以使 ...
 - Linux 编程学习笔记----过程管理和项目发展(在)
		
转载请注明出处,http://blog.csdn.net/suool/article/details/38406211,谢谢. Linux进程存储结构和进程结构 可运行文件结构 例如以下图: 能够看出 ...
 - 【Xilinx-Petalinux学习】-02-建立PetaLinux工程
		
前面我已经把PetaLinux成功安装到了Ubuntu虚拟机当中了,接下来就要实际操作,将PetaLinux移植到我们自己的硬件平台当中去. step1:硬件描述文件 有两种PetaLinux工程建立 ...
 - ELF文件结构描述
		
ELF目标文件格式最前部ELF文件头(ELF Header),它包含了描述了整个文件的基本属性,比如ELF文件版本.目标机器型号.程序入口地址等.其中ELF文件与段有关的重要结构就是段表(Sectio ...
 
随机推荐
- UVA 10061 How many zero's and how many digits ? (m进制,阶乘位数,阶乘后缀0)
			
题意: 给出两个数字a和b,求a的阶乘转换成b进制后,输出 (1)后缀中有多少个连续的0? (2)数a的b进制表示法中有多少位? 思路:逐个问题解决. 设a!=k. k暂时不用直接转成b进制. (1 ...
 - Android 自定义RadioButton的样式
			
Android 自定义RadioButton的样式 我们知道Android控件里的button,listview可以用xml的样式自定义成自己希望的漂亮样式. 最近用到RadioButton,利用xm ...
 - javamail模拟邮箱功能发送电子邮件-中级实战篇【新增附件发送方法】(javamail API电子邮件实例)
			
引言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...
 - Java中String为什么是final
			
final概念: 如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父亲被继承.因此,一个类不能既被声明为abstract,又被声明为final. 将变量或方法声明为final,可以 ...
 - js记录用户在网站的浏览记录和停留时间
			
by weber开发者 from http://weber.pub/ 本文地址: http://weber.pub/js记录用户行为浏览记录和停留时间/163.html 问题 公司想统计一个用户从进入 ...
 - 开发者必读jQuery Mobile入门教程
			
你每天都会对着它讲话,和它玩游戏,用它看新闻——没错,它就是你裤兜里的智能手机.android,黑莓还是iphone?为了让你清楚意识到究竟哪些才算是智能手机,我在下面总结了一个智能手机系统/设备的列 ...
 - InnoDB: Error: could not open single-table tablespace file
			
找到\mysql\bin下面的my.ini中mysqld项目后添加 innodb_force_recovery = 1
 - Java并发编程-关卡
			
CyclicBarrier 直译过来叫循环栅栏,它主要的方法就是一个:await().await() 方法没被调用一次,计数便会减少1,并阻塞住当前线程.当计数减至0时,阻塞解除,所有在此 Cycli ...
 - 在Jenkins中使用Git Plugin访问Https代码库失败的问题
			
最近需要在Jenkins上配置一个Job,SCM源是http://git.opendaylight.org/gerrit/p/integration.git 于是使用Jenkins的Git Plugi ...
 - stl 中List vector deque区别
			
stl提供了三个最基本的容器:vector,list,deque. vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此 它能非常好的支持随 ...