linux目标文件,Linux下目标文件分析
作者:冯老师,
1. 程序源码如下:
2.命令
gcc –E simple_section.c –o simple_section.i
gcc –S simple_section.i –o simple_section.s
gcc –c simple_section.s –o simple_section.o
gcc simple_section.o –o a.out
3. Elf文件头
ELF目标文件格式的最前部是ELF文件头,它包含了描述整个文件的基本属性,包括ELF魔数、文件机器字节长度、数据存储方式、版本、运行平台、ABI版本、ELF重定位类型、硬件平台、硬件平台版本、入口地址、程序头入口和长度、段表的位置和长度及段的数量等。
文件头的结构体定义如下:
使用”readelf –h”命令可以查看目标文件头文件的内容:
magic是结构体的第一个成员e_indent,16个字节:
最开始的4个字节是所有的ELF文件都必须相同的标识码,分别为0x7f, 0x45, 0x4c,0x 46。第一个字节对应ASCII字符里的DEL控制符,后面3个字节刚好是ELF这三个字母的ASCII值。
4. 段表
ELF文件中有很多段,段表就是保存这些段的基本属性的结构。包括每个段的段名、段的长度、在文件中的偏移、读写权限及段的其他属性。也就是说ELF文件段的结构式由段表决定的,编译器、连接器和装载器都是依靠段表来定位和访问各个段的属性的。
段表的定义如下:
“objdump –h”命令只是显示关键段,省略了辅助性的段。”readelf -S”命令显示的更完整。
已初始化的全局变量和局部静态变量,都保存在.data段。未初始化的全局变量和局部静态变量一般放在.bss段。
但是,这个例子里,bss段只占4个字节。
通过下面的符号表,可以看出只有static_var2变量放在了bss段中,global_uninit_var并没有放在任何的,只是一个未定义的“COMMON符号”,这和编译器有关,全局的未初始化变量,有的放在bss 段,有的则不放,只是预留一个未定义的全局变量符号,等到最终链接成可执行文件的时候,再在bss段分配空间。
备注:
1) .bss段在”objdump -h”的输出结果中,没有“CONTENTS”,因此不存在。
2) .comment段:存放的是编译器版本信息,比如字符串“GCC:(GNU)4.2.0”
3) .shstrtab : Section String Table.段名表
4) .strtab:string table字符串表
5) .symtab: Symbol Table符号表
6) .rel.text: 告诉链接器指令中的哪些地方需要做重定位
7) .objdump –s simple_section.o命令可以显示所有段的内容。
8) .hexdump –C simple_section.o 命令,可以把目标文件中的所有字节都打印出来。
start of section headers是372字节,十六进制后是0x00000174。和下图中section table的起始地址是一致的。
再结合”readelf –S simple_section”的结果,注意Al属性,会有对齐,可以画出下面的图:
最后的0x51c刚好是1308字节,是simple_section.o的大小。
linux目标文件,Linux下目标文件分析相关推荐
- Linux下统计当前文件夹下的文件个数、目录个数
这篇文章主要介绍了Linux下统计当前文件夹下的文件个数.目录个数,本文使用ls命令配合管理.grep命令实现统计需求,需要的朋友可以参考下 1) 统计当前文件夹下文件的个数 复制代码 代码如下: l ...
- linux shell判断当前目录下的文件或目录
linux shell判断当前目录下的文件或目录 #!bin/sh for file in ./* doif test -f $filethenecho $file 是文件elseecho $file ...
- linux替换某个文件夹下所有文件,Linux 批量查找并替换文件夹下所有文件的内容...
1.批量查找某个目下文件的包含的内容 cd etc grep -rn "查找的内容" ./ 2.批量替换某个目下所有包含的文件的内容 cd etc sed -i "s/查 ...
- linux du 文件大小排序,du命令 实现Linux 某个文件夹下的文件按大小排序
1. df -lh 2. du -s /usr/* | sort -rn 这是按字节排序 3. du -sh /usr/* | sort -rn 这是按兆(M)来排序 4.选出排在前面的10个 du ...
- 【转】【Linux】Linux下统计当前文件夹下的文件个数、目录个数
[转][Linux]Linux下统计当前文件夹下的文件个数.目录个数 统计当前文件夹下文件的个数,包括子文件夹里的 ls -lR|grep "^-"|wc -l 统计文件夹下目录的 ...
- Linux统计文件夹下的文件数量
统计某文件夹下目录文件的个数,统计文本文件的数量 Linux下有三个命令:ls.grep.wc 通过这三个命令的组合可以统计目录下文件及文件夹的个数.ls常用命令介绍 统计当前目录下文件的个数(不包括 ...
- linux如何统计目录下的文件个数,linux怎么查看一个目录下的文件数量
有时候需要看文件夹下有多少文件,那么就需要用到以下指令 $ls -l | grep -c '^-' 个grep是啥意思呢?我们man一下 $man grep 会看到以下描述: SYNOPSIS gre ...
- Linux C 读取文件夹下所有文件(包括子文件夹)
Linux C 读取文件夹下所有文件(包括子文件夹) 递归读取某文件夹及其子文件夹下所有文件名 深入探讨:linux中遍历文件夹下的所有文件 Linux C :遍历输出指定目录下的所有文件 Linux ...
- linux 压缩当前文件夹下所有文件
linux zip压缩.压缩当前文件夹下所有文件,压缩为a.zip.命令行的方法是怎样. zip -r fileName.zip 文件夹名 tar tar命令可以用来压缩打包单文件.多个文件.单个目录 ...
- linux中断处理模式,Linux在保护模式下的中断处理分析.pdf
Linux在保护模式下的中断处理分析.pdf Linux 在保护模式下的中断处理分析 刘万里 杨 斌 (西南交通大学计算机与通信工程学院,成都 610031) E-mail:awan@ 摘 要 该文以 ...
最新文章
- mysql 上亿记录_一入职!就遇到上亿(MySQL)大表的优化....
- python数据模型的意义_Python 数据模型
- Unreal Engine 4 —— Post Process Shader练手(HLSL)
- Infortrend EonStor GS赢得 “年度最佳混合式存储”大奖
- 对 Entity 的初步构思
- spyder开多个程序_【程序源代码】基于Vue+ElementUI web开发框架
- 交互键盘_如何仅为键盘交互添加聚焦环
- adb 提示:error: unknown host service解决方法
- OAuth2.0授权协议与客户端授权码模式详解
- java开发web使用struts2,springMVC和spring,Jquery的理由?
- 即将面世——AWS SDK for Go
- 设计模式系列2-设计模式分类及23种设计模式中英文名称对照
- 软件测试简历上的职业技能怎么写,软件测试岗位个人简历个人技能范文
- 安全多方学习开源框架调研
- 【错误记录】Git 使用报错 ( error: The branch ‘feature1‘ is not fully merged. )
- STM32F10xxx20xxx21xxxL1xxxx Cortex-M3程序设计手册 阅读笔记四(1):关于STM32核心外设
- i2c-tool调试工具使用方法介绍
- 记go语言椭圆曲线算法公私钥验证补充
- echarts柱状图顶部数据显示气泡
- 知乎500万人热议:如何快速培养英语思维方式?