ELF学习--可执行文件】的更多相关文章

承接上一篇.我们来看看可执行文件和重定位文件的不同点. readelf -h test 相比较重定位文件,可执行文件的ELF header中入口地址是0x8048320.而且除了section header外,还存在program header.program header起始于第52个字节,因此program header应该是紧接着ELF header. 可执行文件的ELF 布局如下: 我们来看一下0x8048320地址是什么. objdump -d test 0x8048320是_star…
当我们在linux bash下执行ELF程序时,Linux系统是怎样装载和执行的呢? 1.bash进程fork出子进程 2.在bash的子进程中调用execve系统调用来执行指定的ELF. 3.execve系统调用的入口是sys_execve,在sys_execve会调用do_execve 4.在do_execve中会读取可执行文件的前128个字节.这128个字节用来判断可执行文件是哪种类型. 5.do_execve读取了128个字节的文件头后,调用serch_binary_handle去搜索匹…
add.c int data = 1;int bss;const int rodata = 1;int add(int num1, int num2){ int sum = 0; sum = num1 + num2; return sum;} 编译add.c成.o文件 gcc -c add.c(-c表示只编译不链接) file add.o输出结果如下: 此结果表明add.o是个重定位文件. 查看elf header可查看到更详细信息:readelf -h add.o 由于是重定位文件,ELF中并…
1.可重定位目标文件格式 主要是由ELF头,一些节比如.text节,.rodata节,.data节,.bss节等,前面是只读的,后面是可读可写的,加上一个节头表 1.1 ELF头里面主要包含了16字节的标识信息,文件类型,机器类型,节头表偏移,节头表的表项大小以及个数,以及程序的入口地址,就是第一句执行的代码 好像和PE文件差不多的构成...不过PE的格式更加复杂了...过几天看看撸个PE解析器或者ELF的解析器 1.2.节头表存储着节的名字,访问方式,偏移,以及到虚拟地址的地址. 1.3. 可…
现在我们使用 readelf 命令来查看 elfDome.out 的文件头 readelf -l elfDemo.out 使用 readelf 来查看程序头: readelf -S elfDemo.o 使用 readelf 命令查看目标文件中完整的段: 可以使用 readelf 读取这两个表:偏移表加字符 $ readelf -x .strtab elfDemo.o readelf -s elfDemo.o 符号表 readelf -r elfDemo.o 重定位表 LD_PRELOAD 环境变…
视频学习 可执行文件是怎么得来的? .c汇编成汇编代码.asm,然后再汇编成目标码.o.然后在连接成可执行文件,然后加载到内存可执行了. 对hello.c文件预处理(cpp),预处理负责把include的文件包含进来及宏替换等工作. 把hello.cpp编译成汇编代码hello.s 再把编译代码hello.s编译成目标代码hello.o(二进制的文件),然后把hello.o链接成可执行文件hello. hello是使用共享库的,再静态编译,把所有完全依赖的都放在hello.static的内部.…
一.编译器arm-linux-gcc 1.用arm-linux-gcc编译一个程序,一般它是要经过如下步骤的: 1.1.预处理阶段 编译器把上述代码中stdio.h编译进来,使用GCC的选项-E可以使GCC在预处理结束后停止编译过程,而不继续其他动作了. 1.2.编译阶段 首先检查代码的规范性.是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,arm-linux-gcc把代码翻译成汇编语言.用户可以使用-S选项来进行查看,该选项只编译而不进行汇编,生成汇编代码. 1.3.汇编阶段 把编…
转载请注明出处,http://blog.csdn.net/suool/article/details/38406211,谢谢. Linux进程存储结构和进程结构 可运行文件结构 例如以下图: 能够看出,此ELF可运行文件存储时(没有调入内存)分为代码区.数据区和未出花数据区三部分. 代码区:存放cpu的运行的机器指令. 数据区:包括程序中的已经初始化的静态变量,以及已经初始化的全局变量. 未初始化数据区:存入的是未初始化的全局变量和未初始化的静态变量. 如今在上面的程序代码中添加一个int的静态…
前面我已经把PetaLinux成功安装到了Ubuntu虚拟机当中了,接下来就要实际操作,将PetaLinux移植到我们自己的硬件平台当中去. step1:硬件描述文件 有两种PetaLinux工程建立的方法,一种是下载官方开发板的BSP包并安装,一种就是针对自己的硬件平台去剪裁Linux功能以适应自己的需求. 第一种,比较简单,官方提供了完整的demo和已经预编译好的各种文件. 比如说我们从网上下载了Avnet-Digilent-ZedBoard-v2015.4-final.bsp,我们直接执行…
ELF目标文件格式最前部ELF文件头(ELF Header),它包含了描述了整个文件的基本属性,比如ELF文件版本.目标机器型号.程序入口地址等.其中ELF文件与段有关的重要结构就是段表(Section Header Table) ELF文件格式 可重定向文件:文件保存着代码和适当的数据,用来和其他的目标文件一起来创建一个可执行文件或者是一个共享目标文件.(目标文件或者静态库文件,即linux通常后缀为.a和.o的文件) 可执行文件:文件保存着一个用来执行的程序.(例如bash,gcc等) 共享…