可执行文件(ELF)格式的理解】的更多相关文章

ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西.以及都以什么样的格式去放这些东西.它自最早在 System V 系统上出现后,被 xNIX 世界所广泛接受,作为缺省的二进制文件格式来使用.可以说,ELF是构成众多xNIX系统的基础之一,所以作为嵌入式Linux系统乃至内核驱动程序开发人员,你最好熟悉并掌握它. 其实,关于ELF这个主题,网络上已经有相当多的文章存在,但是其介绍的内容比…
摘自http://www.cnblogs.com/xmphoenix/archive/2011/10/23/2221879.html 可执行文件(ELF)格式的理解 ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西.以及都以什么样的格式去放这些东西.它自最早在 System V 系统上出现后,被 xNIX 世界所广泛接受,作为缺省的二进制文件格式来使用.可以说,ELF是构成众多xNIX…
LInux命令只是和Kernel一起被编译进操作系统的存在于FS的ELF格式二进制文件,或者权限足够的脚本,或者一个软链 ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西.以及都以什么样的格式去放这些东西.它自最早在 System V 系统上出现后,被 xNIX 世界所广泛接受,作为缺省的二进制文件格式来使用.可以说,ELF是构成众多xNIX系统的基础之一,所以作为嵌入式Linux系统…
近期研究了一下elf文件格式,发现好多资料写的都比較繁琐,可能会严重打击学习者的热情,我把自己研究的结果和大家分享,希望我的描写叙述可以简洁一些. 一.基础知识 elf是一种文件格式,用于存储Linux程序. 它内部都有一些什么信息呢?大概包含编制好的计算机指令,数据,计算机在须要的时候把这个文件读取到内存中,cpu就能够从内存中一条一条的读取指令来运行了. 所以说想明确elf格式,我们应该了解一下计算机运行程序须要那些信息.所以这一节,我们补充一些计算机系统的基础知识. 进程和虚拟内存: Li…
基于本文的一个实践<使用Python分析ELF文件优化Flash和Sram空间的案例>. 1.背景 ELF是Executable and Linkable Format缩写,其官方规范在<Tools Interface Standard Executable and Linkable Format Specification version 1.2>分为三部分:Executable and Linking Format:Processor Specific(Intel Archit…
百篇博客系列篇.本篇为: v51.xx 鸿蒙内核源码分析(ELF格式篇) | 应用程序入口并不是main | 51.c.h.o 加载运行相关篇为: v51.xx 鸿蒙内核源码分析(ELF格式篇) | 应用程序入口并不是main | 51.c.h.o v53.xx 鸿蒙内核源码分析(ELF解析篇) | 你要忘了她姐俩你就不是银 | 51.c.h.o v54.xx 鸿蒙内核源码分析(静态链接篇) | 完整小项目看透静态链接过程 | 51.c.h.o v55.xx 鸿蒙内核源码分析(重定位篇) | 与…
ELF (Executable Linkable Format)UNIX类操作系统中普遍采用的目标文件格式 . 首先要知道它有什么作用:工具接口标准委员会TIS已经将ELF作为运行在Intel32位架构之上的各类型操作系统的可导出对象文件格式标准.ELF标准为开发者提供了一组横跨多运行环境的二进制接口定义来组织软件开发 :ELF 标准的目的是为软件开发人员提供一组二进制接口定义,这些接口可以延伸到多种操作环境,从而减少重新编码.重新编译程序的需要.接口的内容包括目标模块格式.可执行文件格式以及调…
转自Hex.bin.axf.elf格式文件小结 一.HEX Hex文件,一般是指Intel标准的十六进制文件.Intelhex 文件常用来保存单片机或其他处理器的目标程序代码.它保存物理程序存储区中的目标代码映象.一般编程器均支持生成此种格式文件.如,KEIL下可通过配置相关选项来生成HEX目标文件. HEX文件由记录(RECORD)组成.在HEX文件里面,每一行代表一个记录. 形如  :BBAAAATTHHHH...HHHHCC BB:字节个数. AAAA:数据记录的开始地址,高位在前,低位在…
尽管每天都在调用linux的elf文件做各种事,但却很少去了解他,最近尝试在orangepi上编译个elf到android手机上运行,因为两个CPU都是ARMv8的.结果运行失败了.遂查找原因.结果挖出这玩意... 以下内容大部分为摘抄整理: 关于ABI,EABI,OABI: ABI(application binary interface) 应用程序二进制接口 一般应用程序是要分各种CPU架构的,ABI用于对接. 而ABI的不同则是linux内核和glibc的升级导致的规范变化导致的.不同的A…
前文链接: ELF格式探析之一:Segment和Section ELF格式探析之二:文件头ELF Header详解 今天我们讲对目标文件(可重定位文件)和可执行文件都很重要的section. 我们在讲ELF Header的时候,讲到了section header table.它是一个section header的集合,每个section header是一个描述section的结构体.在同一个ELF文件中,每个section header大小是相同的.(其实看了源码就知道,32位ELF文件中的se…
现在PC平台流行的可执行文件格式(Executable)主要是Windows下的PE(Portable Executable)和Linux的ELF(Executable Linkable Format),它们都是COFF(Common file format)格式的变种.不光是可执行文件(Windows的.exe和Linux下的ELF可执行文件)按照可执行文件格式存储.动态链接库(DLL,Dynamic Linking Library)(Windows的.dll和Linux的.so)及静态链接库…
http://blog.csdn.net/edonlii/article/details/8779075 1. 读取ELF文件头: $ readelf -h signELF Header:  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00  Class:                                                  ELF64  Data:                            …
http://www.cnblogs.com/hzl6255/p/3312262.html ELF, Executable and Linking Format, 是一种用于可执行文件.目标文件.共享库和核心转储的标准文件格式.  ELF格式是是UNIX系统实验室作为ABI(Application Binary Interface)而开发和发布的. 这里简单介绍一下相关历史:  - UNIX:        最初采用的格式为a.out,之后被System V中的COFF取代,最后则被SVR4中的…
一.实验内容 通过阅读bootmain.c,了解bootloader如何加载ELF文件.通过分析源代码和通过qemu来运行并调试bootloader&OS, bootloader如何读取硬盘扇区的? bootloader是如何加载ELF格式的OS? 二.实验相关 ELF文件格式 ELF(Executable and linking format)文件格式是Linux系统下的一种常用目标文件(object file)格式,有三种主要类型: 用于执行的可执行文件(executable file),用…
对比参考:剖析.o文件ELF组成 相比.o的ELF格式,有哪些变化? .rel.text和.rel.data消失了 为什么这两个节会消失? 链接器将各.o中同名的.text和.data节整合到一起时,会对整合后的.text和.data进行重定位.其实重定位时主要针对就是.text和.data节,不过这.text和.data节重定位时需要依赖.rel.text和.rel.data中的信息,一旦重定位结束后,这两个节的使命就完成了,自然也就会消失. 多出了两个节 init节 作用 这个节会提供_in…
前言 ELF格式的.gnu.hash节在设计上比较复杂,直接从glibc源码进行分析的难度也比较大.今天静下心来看了这篇精彩的文章,终于将布隆滤波器.算数运算转为位运算等一系列细节搞懂了(值得一提的是,这篇博客十分值得花一些时间读懂,它不仅对总体有一个较好的描述,而且还涉及了许多有益的实现细节).但本人愚钝异常,没有一个完整的walkthrough就不能觉得自己真的搞懂了一个东西.所以本文从查找一个符号的真实情况出发,把ELF格式是如何组织一个符号,以及动态链接器如何读取并处理这些信息以进行符号…
练习四:分析bootloader加载ELF格式的OS的过程. 1.题目要求 通过阅读bootmain.c,了解bootloader如何加载ELF文件.通过分析源代码和通过qemu来运行并调试bootloader&OS, bootloader如何读取硬盘扇区的? bootloader是如何加载ELF格式的OS? 提示:可阅读"硬盘访问概述","ELF执行文件格式概述"这两小节. 2.整个流程 假定进入了保护模式之后,bootloader需要能够加载ELF文件.…
arm-linux-ld 可以将程序链接成我们arm平台下的可运行的程序 以之前使用过的led程序为例: 首先: arm-linux-gcc -g -c led.S (-g是表示产生调试信息, -c是表示只编译不链接) 产生led.o文件 arm-linux-ld -Tled.lds -o led.elf led.o 产生.elf格式的文件 然后通过: arm-linux-readelf命令:读出.elf的详细内容: arm-linux-readelf -a led.elf(显示所有的log信息…
这周工作终于不太忙了,可以写点笔记总结一下了. 之前的文章如何在Keil-MDK开发环境生成Bin格式文件,介绍了如何在Keil开发环境使用fromelf软件,将生成的axf文件转换为bin文件,这次我们再来介绍一下如何将elf文件转换为hex文件. 如何将elf文件转换为hex文件 elf(Executable and Linkable Format)文件一般是由gcc编译器生成的,在Linux开发环境使用较多,但Windows一般情况下需要使用hex文件来进行烧录,那么如何将elf格式转换为…
关于Java中语句符号及格式的理解 这篇文章是撰写的第一篇文章,在此作一下博主是一名在读的工科研究生,种种原因,研二开始决定转行从事程序员工作.开始的自学之路并不算非常顺畅,也走了一点弯路,但一直都坚持了下来,慢慢地,在学习的过程中渐入佳境,找到了学习的兴趣和成就感.开通这个博客,既有出于在技术层面上不断追求的希冀,也希望记录自己在学习路程上的生活点滴,和各位同仁共勉. 谈一谈对于流程控制语句中的格式的理解,在我看来对于一种编程语言,其语言的规范格式其实都是一样的,无论你是什么样的语法句子,其”…
bulk json格式的理解 一.常规格式 按常规理解,bulk中json格式可以是以下方式 [{ "action": { }, "data": { } }] 这种方式对程序员友好,可读性好.但是如果写成这样的话,es拿到这种格式的json串以后,要按照下述流程去进行处理: (1)将json数组解析为JSONArray对象,这个时候,整个数据,就会在内存中出现一份一模一样的拷贝,一份数据是json文本,一份数据是JSONArray对象.(主要问题就出在这里) (2)…
1.python文件开头utf-8格式的理解 2.程序中读取文件时utf-8格式的理解 aa.py文件代码示例: #!/usr/bin/python # -*- coding:utf-8 -*- fr1 = open("goods_information", "r", encoding="utf-8") print(fr1.read()) 其中# -- coding:utf-8 --代表Python解释器对本文件的解码格式,fr1 = open(…
最近一个月的时间大部分在研究glibc中dlopen的代码,基本上对整个流程建立了一个基本的了解.由于网上相关资料比较少,走了不少弯路,故在此记录一二,希望后人能够站在我这个矮子的肩上做出精彩的成果. ELF格式简介 dlopen是用来加载ELF文件中的共享对象(shared object,下文简称为so)的.ELF文件有多种类别,通过其header中0x10处的两个字节标识,参考Wikipedia.ELF的header中还包含了一些额外信息如指令集.操作系统信息等等,在本文中不会涉及. 可以把…
ELF文件的结构如下图所示: ELF文件由4部分组成,分别是ELF头(ELF header).程序头表(Program header table).节(Sections)和节头表(Section header table). 实际上,一个文件中不一定包含全部这些内容,而且它们的位置也未必如上图所示这样安排,只有ELF头的位置是固定的,其余各部分的位置.大小等信息由ELF头中的各项值来决定. ELF header的格式如下代码所示: #define EI_NIDENT 16 typedef str…
Linux下ELF文件类型分为以下几种: 1.可重定位文件,比如SimpleSection.o: 2.可运行文件,比如/bin/bash. 3.共享目标文件,比如/lib/libc.so. 在Linux 可重定位文件 ELF结构一文中,我们已经分析了可重定位文件ELF结构. 本文分析可运行文件的ELF结构. 首先附上源码: SectionMapping.c #include <stdlib.h> int main() { while(1) { sleep(1000); } return 0;…
ELF file header (ELF文件头) /* The ELF file header. This appears at the start of every ELF file. */ #define EI_NIDENT (16) typedef struct { unsigned char e_ident[EI_NIDENT]; /* Magic number and other info */ Elf32_Half e_type; /* Object file type */ Elf…
PE文件格式 一.基本结构 1.DOS头一般到节区头成为PE头部分,其下称为PE体.文件的内容一般可分为代码(.text).数据(.data).资源(.rsrc),分别保存. 2.PE头与各节区的尾部存在一个区域,称为NULL填充,为了提高效率,计算机使用"最小基本单位"这一概念,文件/内存中节区的起始位置应该在各文件/内存最小单位的整数倍上. 3.RVA+ImageBase=VA 4.当DLL加载到进程虚拟内存指定位置时,可能该位置已经被占用,则需要使用重定位方式加载到其他空白的地方…
1.arm-linux-gcc 常用的参数:-o[制定输出文件名] -c[只到编译停止,不连接] -g[键入调试信息] -xO[优化级别] -w/W(警告等级) arm-linux-gcc -o dest source,直接编译出可执行文件elf格式 arm-linux-gcc -o dest source -c 只编译不连接,生成.o格式的库文件,用来提供给连接器连接成elf 其他的参数可以在GCC的手册中了解所有信息. 2.arm-linux-ld 如果GCC中使用的-c,需要arm-lin…
其实问题的本质是对elf格式的理解问题,因为是查看so库的符号表发现的问题. 事情起因是这样的,由于我的一个程序编译的时候出现了undefined reference to “XXX”的错误,需要链接特定的so库,发现用nm [file]找不到“XXX”函数符号,结果用readelf -s [file] 就找到了.其实问题是我对so理解的不深刻. 一般来说,对于一个so库有两个符号表,一个是“正常的”(在.symtab和.strtab节中).一个是动态的(.dynsym和.dynstr节中).如…
本文内容依据http://www.wiki.xilinx.com网址编写,编译所用操作系统为ubuntu 14 1.交叉编译环境的安装配置 1)http://www.wiki.xilinx.com/Install+Xilinx+Tools 2.uboot的编译1)下载uboot源代码下载uboot源代码,务必要下载tar.gz格式的文件,地址: https://github.com/Xilinx/u-boot-xlnx/releases 进入u-boot目录下tools目录,添加路径到环境变量:…