1.ELF之Elf Header

1.ELF的三个文件头

每个ELF文件有三个文件头,用来索引信息。

(1).EH = ELF file Header 可在此读到PH,SH在文件中的offset。

(2).PH = Program Header 与load program有关的索引,.o的PH为空。

(3).SH = Section Header 组成此文件的所有section的索引。

 

2. elf.h

先以32位的.o文件为例。

/usr/include/elf.h中可以查到三个文件头的组成结构,以及各个值对应的意义。

/* 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 */Elf32_Half    e_machine;        /* Architecture */Elf32_Word    e_version;        /* Object file version */Elf32_Addr    e_entry;        /* Entry point virtual address */Elf32_Off     e_phoff;        /* Program header table file offset */Elf32_Off     e_shoff;        /* Section header table file offset */Elf32_Word    e_flags;        /* Processor-specific flags */Elf32_Half    e_ehsize;        /* ELF header size in bytes */Elf32_Half    e_phentsize;        /* Program header table entry size */Elf32_Half    e_phnum;        /* Program header table entry count */Elf32_Half    e_shentsize;        /* Section header table entry size */Elf32_Half    e_shnum;        /* Section header table entry count */Elf32_Half    e_shstrndx;        /* Section header string table index */
} Elf32_Ehdr;

3.示例程序

bar.c

int  bar0 = 0;
int  bar1 = 1;

这个.c只有两个变量定义组成。把它编译成bar.o。

4.对应关系:

 

(1)magic number:  给操作系统和编译器辨别此文件是ELF二进制库。

          0x45 0x4C 0x46为ELF三个字母的ASCII码。

(2)type: 文件类型

  Relocatable file = 1(.o, .a 可重定位文件,静态库)

  Executable file = 2(可执行文件,a.out,exe,运行库)

      Shared object file = 3(共享目标文件,.so,动态库)

(3)machine:架构

  eg:0x0028=40=ARM,  0x0003=3=Intel_80386

(4)version: ELF 版本,目前均为1

(5)entry:程序的入口地址(虚拟地址),.o文件没有入口,故为0。

      可执行文件应该为_start的虚拟地址。

(6)PH相关:    phoff:          H在文件中的offset

        phentsize:    PH的每个entry有多大,Byte

        phnum:        PH有多少项entry

(7)SH相关:        shoff:           SH在文件中的offset

        shentsize:     SH的每个entry有多大

        shnum:         SH有多少项entry

        shstrndx:      SH中String Table Section排第几项。

(8)flags:ABI版本

(9)ehsize:ELF Header的大小:0x0034=52(B),EH大小为固定值52B。

转载于:https://www.cnblogs.com/altc/p/8989493.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398078.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java路径1.7_Java环境配置原理详解1.Jdk安装目录文件说明:一般jdk安装目录及路径 Javajdk1.7.0_79lib,里面主要包含以下文件夹。bin...

Java环境配置原理详解1.Jdk安装目录文件说明:一般jdk安装目录及路径 Javajdk1.7.0_79lib,里面主要包含以下文件夹。bin:主要存放的是java工具中常用命令如:java,javac等。db:安装java db的路径。include&am…

2018年5月5日论文阅读

国外精读!title(27):We don’t need no bounding-boxes: Training object class detectors using only human verification(我们不需要任何边界框:只使用人工验证来训练对象类别检测器)---20170…

sql2005主从数据库同步配置

网站规模到了一定程度之后,该分的也分了,该优化的也做了优化,但是还是不能满足业务上对性能的要求;这时候我们可以考虑使用主从库。主从库是两台服务器上的两个数据库,主库以最快的速度做增删改操作最新数据的查询操作…

InceptionV2----Batch Normalization层

一、BN层的操作 1.BN层的操作位置:在非线性映射之前,目的是为了减少梯度消失和梯度爆炸。 1.对输入的x做归一化 2.增加2个参数,提高模型表达能力 3.理想情况下E和Var应该是针对整个数据集的,但显然这是不现实的。因此,…

前端技术之_CSS详解第五天

前端技术之_CSS详解第五天 一、行高和字号 1.1 行高 CSS中&#xff0c;所有的行&#xff0c;都有行高。盒模型的padding&#xff0c;绝对不是直接作用在文字上的&#xff0c;而是作用在“行”上的。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu…

pxe装机dhcp获取不到_关于PXE服务器环境搭建流程中遇到的问题及解决方法

环境准备中遇到的问题首先需要将系统镜像挂载到 /mnt&#xff1a;#mount /dev/sdd2 /mnt/usb_disk 将U盘挂载#cp rhel-server-7.6-x86_64-dvd.iso /home 系统镜像拷到本地#mount -o loop rhel-server-7.6-x86_64-dvd.iso /mnt问题&#xff1a;ifconfig命令未找到解决&#xff1…

一小时包教会 —— webpack 入门指南

什么是 webpack&#xff1f; webpack是近期最火的一款模块加载器兼打包工具&#xff0c;它能把各种资源&#xff0c;例如JS&#xff08;含JSX&#xff09;、coffee、样式&#xff08;含less/sass&#xff09;、图片等都作为模块来使用和处理。 我们可以直接使用 require(XXX) 的…

java 简单图片浏览器_Java实现简单的图片浏览器

第一次写博客&#xff0c;不喜勿喷。最近一个小师弟问我怎么用Java做图片浏览器&#xff0c;感觉好久没玩Java了&#xff0c;就自己动手做了一下。学校的教程是用Swing来做界面的&#xff0c;所以这里也用这个来讲。首先要做个大概的界面出来&#xff0c;eclipse有一个很好用的…

60. Spring Boot写后感【从零开始学Spring Boot】

从2016年4月15日到2016年7月20日经历长达3个月的时间&#xff0c;【从零开始学习Spring Boot】系列就要告一段落了。国内的各种资源都比较乱或者是copy 来copy去的&#xff0c;错了也不加以修正下&#xff0c;导致通过百度找到的资源可能都是错误的&#xff0c;正是由于这么一种…

五角星

import turtle turtle.setup(600,400,0,0) turtle.bgcolor(red) turtle.color(yellow) turtle.fillcolor(yellow) turtle.begin_fill() for i in range(5):turtle.forward(200)turtle.right(144) turtle.end_fill()turtle.done()转载于:https://www.cnblogs.com/Paris-YY/p/900…

java customerservlet_顾客管理系统java+servlet

首先我先搭好网页的框架先写一个登陆的html&#xff0c;名字是login.html1)在js中跳转页面的方法&#xff0c;我这里用的是get提交&#xff0c;只传递了一个name。function mylogin() {var usernamedocument.getElementById("name").value;window.location.href"…

mysql给root开启远程访问权限,修改root密码

1.MySql-Server 出于安全方面考虑只允许本机(localhost, 127.0.0.1)来连接访问. 这对于 Web-Server 与 MySql-Server 都在同一台服务器上的网站架构来说是没有问题的. 但随着网站流量的增加, 后期服务器架构可能会将 Web-Server 与 MySql-Server 分别放在独立的服务器上, 以便得…

Qt_Window@Qt Command Prompt从命令行创建工程

#include <QApplication> #include <QLabel>int main(int argc, char *argv[]) {QApplication app(argc, argv);QLabel *label new QLabel("Hello Qt!");label->show();return app.exec(); }第1 行和第2 行包含了两个类的定义&#xff1a;QApplicat…

linux中的守护进程

一、守护进程守护进程&#xff0c;也叫精灵进程&#xff08;daemon&#xff09;它和普通后台进程的区别在于以下三点1、守护进程自成会话&#xff0c;而普通后台进程则不一定2、守护进程不受终端的控制3、守护进程就是后台进程&#xff0c;而后台进程不同于守护进程用ps axj命令…

mysql主从复制 lvs+ keepalived

2019独角兽企业重金招聘Python工程师标准>>> 一、环境 Master&#xff08;主机A&#xff09;&#xff1a;192.168.1.1 Slave&#xff08;主机B&#xff09; &#xff1a;192.168.1.2 W-VIP&#xff08;写入&#xff09; &#xff1a;192.168.1.3 R-VIP&#xff…

php 逗号编码,php有几种编码

当前 mbstring 模块支持以下的字符编码。这些字符编码中的任意一个都能指定到 mbstring 函数中的 encoding 参数。该 PHP 扩展支持的字符编码有以下几种&#xff1a;UCS-4*UCS-4BE (推荐学习&#xff1a;PHP视频教程)UCS-4LE*UCS-2UCS-2BEUCS-2LEUTF-32*UTF-32BE*UTF-32LE*UTF-…

jmeter命令行运行-分布式测试

秒秒开心jmeter命令行运行-分布式测试 上一篇文章我们说到了jmeter命令行运行但是是单节点下的&#xff0c; jmeter底层用java开发&#xff0c;耗内存、cpu&#xff0c;如果项目要求大并发去压测服务端的话&#xff0c;jmeter单节点难以完成大并发的请求&#xff0c;这时就需要…

ambari 自定义组件安装

借鉴&#xff1a;http://www.ibm.com/developerworks/cn/opensource/os-cn-bigdata-ambari3/index.htmlAmbari 在启动的时候&#xff0c;会扫描 resource 目录下 Stack 下面的 service 配置。也就是每个 Service 的 metainfo.xml&#xff0c;同时会将这些配置信息放在自己的数据…

android 双向滑动 seekbar

实现原理&#xff1a;1、自定义View&#xff0c;在onDraw(Canvas canvas)中&#xff0c;画出2个Drawable滑动块&#xff0c;2个Drawable滑动条&#xff0c;2个Paint&#xff08;text&#xff09;2、监听onTouchEvent()事件&#xff0c;修改滑块和滑动条的坐标&#xff0c;调用i…

java开发区块链只需150行代码

本文目的是通过java实战开发教程理解区块链是什么。将通过实战入门学习&#xff0c;用Java自学开发一个很基本的区块链&#xff0c;并在此基础上能扩展如web框架应用等。这个基本的java区块链也实现简单的工作量证明系统。本文用一个java例子,演示了开发一个区块链应用的过程,涉…