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,一经查实,立即删除!

相关文章

UVA 11825 状态压缩DP+子集思想

很明显的状态压缩思想了。把全集分组,枚举每个集合的子集,看一个子集是否能覆盖所有的点,若能,则f[s]max(f[s],f[s^s0]1)。即与差集1比较。 这种枚举集合的思想还是第一次遇到,果然太弱了。。。。~~~~ 其中枚举集合 fo…

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…

Centos下Nodejs+npm环境-部署记录

公司的一个项目上线,需要用到Nodejs和npm环境,这里记录下安装过程,方便回看同时供大家参考。 1)yum安装方式(版本比较老点,v5.12.0 3.8.6) 需要在centos中添加epel和remi源添加epel源&#xff…

AngularJS 事件

ng-click 指令 ng-click 指令定义了 AngularJS 点击事件。 <!DOCTYPE html> <html><head><meta charset"utf-8"><script src"http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script></head>&l…

[LeetCode] #22 Generate Parentheses

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses. For example, given n 3, a solution set is: "((()))", "(()())", "(())()", "()(())", "()()()" 本题是括号…

匹配字符串-好技能-正则表达式

1. 正则表达式规则 1.1 普通字符 字母、数字、汉字、下划线、以及后边章节中没有特殊定义的标点符号&#xff0c;都是"普通字符"。表达式中的普通字符&#xff0c;在匹配一个字符串的时候&#xff0c;匹配与之相同的一个字符。 举例1&#xff1a;表达式 "c&q…

在java中图片随机播放_java-以相同顺序随机播放多个文件

接下来仅使用基本的bash命令.原则是&#xff1a;>生成随机顺序(数字)>按此顺序订购所有文件编码#!/bin/bashcase "$#" in0) echo "Usage: $0 files....." ; exit 1;;esacORDER"./.rand.$$"trap "rm -f $ORDER;exit" 1 2count$(g…

2018年5月5日论文阅读

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

sql2005主从数据库同步配置

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

java接口废弃注释_Java注释Override、Deprecated、SuppressWarnings详解

四、如何对注释进行注释这一节的题目读起来虽然有些绕口&#xff0c;但它所蕴涵的知识却对设计更强大的java程序有很大帮助。在上一节讨论了自定义注释&#xff0c;由此我们可知注释在J2SE5.0中也和类、接口一样。是程序中的一个基本的组成部分。既然可以对类、接口进行注释&am…

C语言再学习——分支结构

if语句是最简单的分之结构。 包含系统头文件用尖括号&#xff0c;但是包含自定义的头文件用双引号&#xff1b; #include<math.h>包含系统头文件 #include “lpj.h” 包含自定义头文件 goto语句在函数体内进行&#xff0c;跳转到其他地方。 do…while语句最少被执行一次。…

InceptionV2----Batch Normalization层

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

Rsync命令详解

说明&#xff1a;Rsync是linux/Unix文件同步和传送工具。用于替代rcp的一个工具&#xff0c;rsync可以通过rsh或ssh使用&#xff0c;也能以daemon模式去运行&#xff0c;在以daemon方式运行时rsync server会开一个873端口&#xff0c;等待客户端去连接。连接时&#xff0c;rsyn…

java二次开发浏览器内核_深入理解基于Selenium的二次开发

对于做web端自动化测试的人来说&#xff0c;可能接触selenium比QTP还要多&#xff0c;但是我们在做基于selenium的二次开发的时候&#xff0c;经常会说到二次开发是 为了易于维护&#xff0c;很多人可能不懂得维护的价值是什么&#xff0c;和到底要维护什么。今天专门写一篇关于…

UVA 10600 ACM Contest and Blackout (次小生成树)

题目大意&#xff1a; 给n个节点&#xff0c;m条边&#xff0c;问最小生成树&#xff0c;次小生成树&#xff1f; ps&#xff1a;以前做次小生成树的时候估计没有掌握牢固&#xff0c;这次wa的好辛苦哟。 1 #include <cmath>2 #include <queue>3 #include <stri…

codeforces 234E Champions' League

传送门&#xff1a;http://codeforces.com/problemset/problem/234/E 题目大意&#xff1a;&#xff08;注意要用文件&#xff09;有n个队伍&#xff0c;每个队伍都有一个积分&#xff0c;按照积分高低顺序列出4个等级&#xff08;每个等级n/4个&#xff0c;所以n一定是4的倍数…

前端技术之_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…

DB天气app冲刺二阶段第七天

又冲刺了一个礼拜了 今天收获应该算是不小了 虽然进度上来说还是一点也没前进 但是找到了好几个突破口 明天继续 今天先不多说了困了。。转载于:https://www.cnblogs.com/gaih/p/4550612.html

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

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