bin文件和elf文件

ELF文件格式是一个开放标准,各种UNIX系统的可执行文件都采用ELF格式,它有三种不同的类型:

  • 可重定位的目标文件(Relocatable,或者Object File)
  • 可执行文件(Executable)
  • 共享库(Shared Object,或者Shared Library)

ELF格式提供了两种不同的视角,链接器把ELF文件看成是Section的集合,而加载器把ELF文件看成是Segment的集合。

有一篇文章介绍elf文件的格式以及加载过程介绍的很详细,可以看一下,地址:http://www.iteye.com/topic/1121480

BIN文件是直接的二进制文件,内部没有地址标记。bin文件内部数据按照代码段或者数据段的物理空间地址来排列。一般用编程器烧写时从00开始,而如果下载运行,则下载到编译时的地址即可。

在Linux OS上,为了运行可执行文件,他们是遵循ELF格式的,通常gcc -o test test.c,生成的test文件就是ELF格式的,这样就可以运行了,执行elf文件,则内核会使用加载器来解析elf文件并执行。

在Embedded中,如果上电开始运行,没有OS系统,如果将ELF格式的文件烧写进去,包含一些ELF文件的符号表字符表之类的section,运行碰到这些,就会导致失败,如果用objcopy生成纯粹的二进制文件,去除掉符号表之类的section,只将代码段数据段保留下来,程序就可以一步一步运行。

elf文件里面包含了符号表等。BIN文件是将elf文件中的代码段,数据段,还有一些自定义的段抽取出来做成的一个内存的镜像。
      并且elf文件中代码段数据段的位置并不是它实际的物理位置。他实际物理位置是在表中标记出来的。

时间: 2025-01-07 04:43:05

bin文件和elf文件的相关文章

检查打开的文件是不是ELF格式的文件,提取“特别”的节中的信息

//检查打开的文件是不是ELF格式的文件 //检验ELF头 //获得节头表的地址 //遍历节头表,依次查看一个节的属性,从节头字符串表中找到其名称,如果名称和"特别"的section名匹配,则找到此节的地址 //提取"特别"的节中的信息 //显示上面提取的信息 #include<stdio.h> #include<elf.h> #include<stdlib.h> #include<string.h> int main

操作ELF文件的方法

8.2.2  操作ELF格式文件的方法 综合以上的描述,总结执行ELF格式文件的方法,步骤如下: (1)从文件起始位置读取一个struct elf32_ehdr结构体,验证文件的正确性以及文件与操作系统是否匹配. (2)找到该结构体中e_entry成员,从系统中获得这个值所指向的内存地址. (3)读出struct elf32_ehdr结构体中的e_phoff.e_phextsize以及e_phnum三个成员.根据这三个值,利用struct elf32_phdr结构体遍历文件中每一个Program

运行ELF文件的应用程序

8.2.3  运行ELF格式的应用程序 首先我们需要提供一些与ELF格式有关的宏定义. 代码8-7 #define ELFCLASSNONE    0 #define ELFCLASS32      1 #define ELFCLASS64      2 #define CHECK_ELF_CLASS(p)              ((p)->e_ident[4]) #define CHECK_ELF_CLASS_ELFCLASS32(p)\ (CHECK_ELF_CLASS(p)==ELFC

ELF文件

ELF文件格式是一个开发标准,各种UNIX系统的可执行文件都采用ELF格式,它有三种不同的类型: 可重定位的目标文件 可执行文件 共享库 现在分析一下上一篇文章中经过汇编之后生成的目标文件max.o和链接之后生成的可执行文件max的格式,从而理解汇编.链接和加载执行的过程. 一.目标文件 ELF文件格式提供了两种不同的视角,在汇编器和链接器看来,ELF文件是由Section Header Table描述的一系列Section的集合,而执行一个ELF文件时,在加载器看来它是由Program Hea

linux实践之ELF文件分析

linux实践之ELF文件分析 下面开始elf文件的分析. 我们首先编写一个简单的C代码. 编译链接生成可执行文件. 首先,查看scn15elf.o文件的详细信息. 以16进制形式查看scn15elf.o文件. 查看scn15elf.o中各个段和符号表的信息. 各个段的详细信息如下. 符号表的信息如下: 使用readelf命令查看各个段的详细信息: 段表信息如下: 符号表信息如下: 下面让我们开始分析文件头吧! 由于我的虚拟机是32位的,我下面就主要以32位的系统进行分析,就不比较32位机和64

实例分析ELF文件静态链接

1.ELF文件格式概貌 readelf -h 查看elf文件头部信息可以看到Type值有三种:REL,EXEC,DYN. REL文件是只被编译没有被链接过的文件,其格式属于左边一种,elf header+section1,2,3...+section header table,每个section对应一个section header table entry,section header table为各个section提供索引.没有被链接过的文件没有program header,不能被加载到内存中运

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, the available GNU for Windows is hopelessly outdated. 将环境变量中path中值去掉"()",依旧不能生成elf文件.关

探寻ELF文件内容,理清符号所在section

受<CSAPP>P453启发,想实际的看看ELF文件的内容,所以做了简单的尝试,希望不虚此行. 采用的程序demo是: swap.c extern int buf[]; int *bufp0 = &buf[0]; int *bufp1; void swap() { int temp; bufp1 = &buf[1]; temp = *bufp0; *bufp0 = *bufp1; *bufp1 = temp; } main.c #include <stdio.h>

实例分析ELF文件动态链接

参考文献: <ELF V1.2> <程序员的自我修养---链接.装载与库>第6章 可执行文件的装载与进程 第7章 动态链接 <Linux GOT与PLT> 开发平台: [[email protected] dynamic_link]# uname -a Linux tanghuimin 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux 实例讲解