elf 文件】的更多相关文章

ELF文件格式是一个开发标准,各种UNIX系统的可执行文件都采用ELF格式,它有三种不同的类型: 可重定位的目标文件 可执行文件 共享库 现在分析一下上一篇文章中经过汇编之后生成的目标文件max.o和链接之后生成的可执行文件max的格式,从而理解汇编.链接和加载执行的过程. 一.目标文件 ELF文件格式提供了两种不同的视角,在汇编器和链接器看来,ELF文件是由Section Header Table描述的一系列Section的集合,而执行一个ELF文件时,在加载器看来它是由Program Hea…
linux实践之ELF文件分析 下面开始elf文件的分析. 我们首先编写一个简单的C代码. 编译链接生成可执行文件. 首先,查看scn15elf.o文件的详细信息. 以16进制形式查看scn15elf.o文件. 查看scn15elf.o中各个段和符号表的信息. 各个段的详细信息如下. 符号表的信息如下: 使用readelf命令查看各个段的详细信息: 段表信息如下: 符号表信息如下: 下面让我们开始分析文件头吧! 由于我的虚拟机是32位的,我下面就主要以32位的系统进行分析,就不比较32位机和64…
.plt的作用是一个跳板,保存了某个符号在重定位表中的偏移量(用来第一次查找某个符号)和对应的.got.plt的对应的地址 .rel.dyn重定向表,在程序启动时就需要重定位完成. .rel.plt保存了重定位表的信息,可以使用lazy的连接方式 .got据说是保存了elf文件本身的各个符号的偏移量,即不要动态链接,未证明 .got.plt保存了重定位地址. 比如printf是一个重定位符号,需要连接该符号时过程是这样: main函数call  .plt段中的一个地址,这里的第一句话就是调转到.…
参考文献: <ELF V1.2> <程序员的自我修养---链接.装载与库>第6章 可执行文件的装载与进程 第7章 动态链接 <Linux GOT与PLT> 开发平台: [root@tanghuimin dynamic_link]# uname -a Linux tanghuimin -.el6.x86_64 # SMP Fri Feb :: UTC x86_64 x86_64 x86_64 GNU/Linux 实例讲解之前先来一段理论铺垫,文字很繁琐但很必要事先了解.…
参考文献: <ELF V1.2> <程序员的自我修养---链接.装载与库>第4章 静态链接 开发平台: [thm@tanghuimin static_link]$ uname -a Linux tanghuimin -.el6.x86_64 # SMP Fri Feb :: UTC x86_64 x86_64 x86_64 GNU/Linux 1.ELF文件格式概貌…
今天安装wxWidgets,输入ldconfig竟然提示 /usr/lib64/libstdc++.so.6.0.18-gdb.py 不是一个elf文件,开头魔数错误 摸不着头脑,上网搜了一下,有说是gnu自己的错误,不过解决方法倒也简单,直接删除该文件 sudo rm /usr/lib64/libstdc++.so.6.0.18-gdb.py 再次ldconfig 整个世界清静了 未明白什么原因导致错误,但是后续安装其他东东都运行正常 两个参考链接: http://blog.csdn.net/…
在嵌入式开发过程中常常遇到将axf或elf文件转换成bin的情况,大家都知道通过gnu toolchain中的objcopy和keil中的fromelf能做到.可是为了这么一个小事而记住复杂的选项以及打开IDE实在说只是去,以下是两个脚本工具,用来转换. 每一个工具都有相应下载链接哦 1.elf2bin elf2bin工具下载后解压,将须要转换的elf文件改名为test.elf放在目录下.然后执行里面的elf2bin.bat就可以.能够看到一个名为test.bin的文件已经生成. 2.axf2b…
在一个进程的虚拟地址空间中,ELF文件是从0x8048000这个地址开始加载的,为什么会是这个地址? 回答:用命令ld --verbose可以看到0x08048000,ld的默认脚本用这个地址作为ELF的起始地址.这个值并没有特殊意义,好像是早期386上的某个类unix系统用了这个值,就一直延续下来了. 还有这个帖子:为什么二进制程序的入口地址是0x8048000?…
作为一名Linux小白,第一次看到a.out这个名字,感觉实在是奇怪,搜了一下才知道这是编译器输出的默认可执行文件名 然后vi一下,哇,各种乱码,仔细看看,发现了三个清晰的字符ELF.继续搜索, 第一感觉就是这就是windows下的*.exe 顺便看到了readelf这条命令,就读了一下这个文件,发现这里边好多东西都不懂,后来在学习linux的过程中渐渐明白了 一部分,前几天刚好跟同学说到了关于ELF文件数据布局的问题,今天总结一下(罗嗦了这么多,真是不好意思). 今天讨论的问题是:我们在源程序…
ELF文件格式是一个开放标准,各种UNIX系统的可执行文件都采用ELF格式,它有三种不同的类型: 可重定位的目标文件(Relocatable,或者Object File) 可执行文件(Executable) 共享库(Shared Object,或者Shared Library) ELF格式提供了两种不同的视角,链接器把ELF文件看成是Section的集合,而加载器把ELF文件看成是Segment的集合. 有一篇文章介绍elf文件的格式以及加载过程介绍的很详细,可以看一下,地址:http://ww…
1. 背景 Zephyr项目Flash和Ram空间比较紧张,有着非常强烈的优化需求. 优化的前提是量化标的,那么如何量化Flash和Ram的使用量呢? 在量化之后,首先要对量化结果进行分析,然后采取措施进行空间优化. 2. 基于ELF信息和linker.cmd分析Flash/Ram使用量 linker.cmd文件中规定了不同section在Flash还是在Ram中,还是兼而有之. 这是一个很有用的信息,基于此我们只需要去罗列每个section的symbol,然后统计大小:就可以知道section…
加载和动态链接 从编译/链接和运行的角度看,应用程序和库程序的连接有两种方式. 一种是固定的.静态的连接,就是把需要用到的库函数的目标代码(二进制)代码从程序库中抽取出来,链接进应用软件的目标映像中: 另一种是动态链接,是指库函数的代码并不进入应用软件的目标映像,应用软件在编译/链接阶段并不完成跟库函数的链接,而是把函数库的映像也交给用户,到启动应用软件目标映像运行时才把程序库的映像也装入用户空间(并加以定位),再完成应用软件与库函数的连接. 这样,就有了两种不同的ELF格式映像. 一种是静态链…
四. ELF 文件格式分析 ELF文件(目标文件)格式主要四种: 可重定向文件: 文件保存着代码和适当的数据,用来和其他的目标文件一起来创建一个可执行文件或者是一个共享目标文件.(目标文件或者静态库文件,即linux通常后缀为 .a 和 .o 的文件) 可执行文件: 文件保存着一个用来执行的程序.(例如bash,gcc等) 共享目标文件: 共享库.文件保存着代码和合适的数据,用来被下连接编辑器和动态链接器链接.(linux下后缀为 .so 的文件.) 执行文件的格式与上述两种文件的格式之间的区别…
二.ELF 文件介绍 2.1 可执行文件格式综述 相对于其它文件类型,可执行文件可能是一个操作系统中最重要的文件类型,因为它们是完成操作的真正执行者.可执行文件的大小.运行速度.资源占用情况以及可扩展性.可移植性等与文件格式的定义和文件加载过程紧密相关.研究可执行文件的格式对编写高性能程序和一些黑客技术的运用都是非常有意义的. 可执行链接格式 ( Executable and Linking Format)最初是由 UNIX 系统实验室 ( UNIX System Laboratories, U…
Nios II 程序固化(如何下载elf文件) 2018年10月15日 21:37:32 瓜儿不甜 阅读数:723    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/snaking616/article/details/83064887 在调试Nios程序阶段,通常需要先将配置文件(*.sof)通过 JTAG 下载刡到FPGA 中,接着在Nios II IDE窗口中,右击工程名,选择Debug as -> Nios II hardware 来…
关于ELF文件的详细介绍,推荐阅读: ELF文件格式分析 —— 滕启明.ELF文件由ELF头部.程序头部表.节区头部表以及节区4部分组成. 通过objdump工具和readelf工具,可以观察ELF文件详细信息. ELF文件加载过程分析 从编译.链接和运行的角度,应用程序和库程序的链接有两种方式.一种是静态链接,库程序的二进制代码链接进应用程序的映像中:一种是动态链接,库函数的代码不放入应用程序映像,而是在启动时,将库程序的映像加载到应用程序进程空间. 在动态链接中,GNU将动态链接ELF文件的…
上一篇讲了ELF文件的总体布局,以及section和segment的概念.按照计划,今天继续讲 ELF header. 讲新的内容之前,先更正一个错误:上一篇中讲section header table中的条目和文件中的section是一一对应的,其实这么讲是不对的.一个section必定有一个section header来描述它,但一个section header不一定在文件中有对应的section,因为有的section是不占用文件字节的.segment也是这个道理. 这篇文章本来应该上周写…
ELF 是Executable and Linking Format的缩写,即可执行和可链接的格式,是Unix/Linux系统ABI (Application Binary Interface)规范的一部分. Unix/Linux下的可执行二进制文件.目标代码文件.共享库文件和core dump文件都属于ELF文件. 下面的图来自于文档 Executable and Linkable Format (ELF),描述了ELF文件的大致布局. 左边是ELF的链接视图,可以理解为是目标代码文件的内容布…
malloc分配的空间是连续的吗?PE/ELF文件里面存的是什么呢?…
GOT应该保存的是puts函数的绝对虚地址,这里为什么保存的却是puts@plt的第二条指令呢? 原来“解释器”将动态库载入内存后,并没有直接将函数地址更新到GOT表中,而是在函数第一次被调用时,才会进行函数地址的重定位,这样做的好处是可以加快程序加载速度,尤其对大型程序来说.有关这方面的更详细的信息,可以搜索“动态链接库的延迟绑定技术”. 继续看第二条指令,pushq $0x0代表什么? 查看Hello world程序的重定位节: ezreal@ez:~/workdir$ readelf -a…
文件的内容:1. BIN文件是 raw binary 文件,这种文件只包含机器码.2. ELF文件除了机器码外,还包含其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等. 所以ELF文件的体积比对应的BIN文件要大. 文件的执行:1. 执行raw binary很简单,只需要将程序加载到其起始地址,就可以执行:    FILE *fp = fopen("vmlinux.bin", "rb");    fread(VMLINUX_START, 1, VMLIN…
linux 修改 elf 文件的dynamic linker 和 rpath https://nixos.org/patchelf.html 下载地址 https://nixos.org/releases/patchelf/patchelf-0.9/patchelf-0.9.tar.gz https://nixos.org/releases/patchelf/patchelf-0.9/patchelf-0.9.tar.bz2 PatchELF PatchELF is a small utilit…
vivado sdk生成elf文件出错:make: Interrupt/Exception caught (code = 0xc00000fd, addr = 0x4227d3) Might be a different reason, but this problem is apparently caused when the PATH variable contains parentheses (, ), as it does on Win Vista/7. Unfortunately, t…
1. 三个文件 1. world.c #include<stdio.h> void world(void) { printf("world.\n"); } 2. hello.c #include <stdio.h> void world(void); void hello(void) { printf("hello\n"); world(); } 3. main.c void main(void) { hello(); } 2. 编译动态库…
http://blog.csdn.net/joker0910/article/details/7655606 1. ELF中的section主要提供给Linker使用, 而segment提供给Loader用,Linker需要关心.text, .rel.text, .data, .rodata等等,关键是Linker需要做relocation.而Loader只需要知道Read/Write/Execute的属性.a.out格式没有这种区分.(注意现在使用gcc编译出来的a.out文件只是取该名字而已…
我们将之前的代码增加下变量来具体看下 在代码中增加了全局变量以及静态变量,还有一个简单的函数. #include <stdio.h> int global_var=1; int global_init_var; void func1(int i){ printf("%d\n",i); } int main(void){ static int static_var=8; static int static_var2; int a=1; int b; func1(static_…
http://blog.csdn.net/lingfong_cool/article/details/7832896 (一) ELF 文件的格式       ELF 文件类型 (1) 可重定位文件( .o 目标文件) : 用于链接创建可执行文件或 so 文件 (2) 可执行文件                     : 用于执行 (3)so( 共享对象 ) 文件            : 用于链接 注 :   一个 Program Header 对应一个 Segment 一个 Section…
对比windowsPE文件与概述 在windows中可执行文件是pe文件格式,Linux中可执行文件是ELF文件,其文件格式是ELF文件格式,在Linux下的ELF文件除了可执行文件(Excutable File),可重定位目标文件(RellocatableObject File).共享目标文件(SharedObjectFile).核心转储文件(Core DumpFile)也都是ELF格式文件. 一个典型的ELF文件大致的结构如下 文件头(ELF Header) 程序头表(Program Hea…
[转]https://blog.csdn.net/ZCShouCSDN/article/details/100048461 ELF 文件规范   ELF(Executable and Linking Format)是一个二进制文件规范.用于定义不同类型的对象文件(Object files)中都放了什么东西.以及都以什么样的格式去放这些东西.   现在流行的二进制可执行文件格式 (Executable File Format),主要是 Windows 下的 PE(Portable Executab…
本文介绍了C6000最新的v7.2或者之后的编译器如何支持ELF(EABI)和COFF-ABI格式,首先由ARM引入嵌入式(Embedded) EABI的介绍,之后比较了COFF-ABI和EABI的区别,如何用编译器选项(--ABI=EABI --strip_coff_underscore)和预编译处理命令来实现从COFF格式到ELF格式的转换,主要是关注long数据类型位宽不一致以及汇编文件变量和函数定义的前置下划线的处理方式.最后是ELF格式引入的链接段区和COFF格式的不同. EABI简介…