目标文件里的秘密

目标文件内包含指令代码、数据和链接环节所需要的一些信息,如符号表、调试信息、字符串表等。一般目标文件将这些信息按不同的属性分类,以“段”的形式存储。本文将在Linux环境下,用bjdump、readelf工具查看目标文件存储的具体形式,可得目标文件中由C语言编译后执行语句放在.text段,已经初始化的全局变量和和局部静态变量放在.data段,未初始化的全局变量和局部静态变量放在.bss段,ELF文件中各个段的基本属性放在.symtab段,段表中很重要的还有重定位表以及ELF文件头。

详见附件

时间: 2024-11-05 17:28:50

目标文件里的秘密的相关文章

《程序员自我修养》阅读笔记-目标文件里有什么

linux下的目标文件(.o文件)采用ELF格式.目标文件里采用段section的格式存储,比如代码段啊(存代码),数据段啊(初始化了的全局变量和局部静态变量),BSS段啊(未初始化的全局和局部静态变量),只读数据段啊(程序中用到的字符串)等.在所有的段外,有一个重要的结构叫做文件头.所以这里从文件头开始说. 1 文件头主要包含以下内容(没什么用的就不写了): (1)e_ident:这里面一个重要的内容就是魔数和机器的位数.魔数用来标识文件的类型,比如elf啊,a.out啊,MZ啊等.机器位数就

使用mac 终端 用sublime 目标文件或目标文件夹

首先,打开终端 执行命令 vim ~/.bash_profile 在.bash_profile里输入以下命令 alias subl="'/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl'" wq保存后回到命令行执行以下命令使其生效:source ~/.bash_profile 这里我们假设在命令行用SublimeText打开.bash_profile,则执行如下: subl ~/.bash_profile 接下

挖掘目标文件

一般C语言编译后的执行语句都编译成及其代码,保存在.text段:已初始化的全局变量和局部静态变量都保存在.data段:未初始化的全局变量和局部静态变量一般放在.bss段里.我们知道未初始化的全局变量和局部静态变量默认都是0,本来他们可以存放在.data段中,但它们的值都为0,放在.data段中是没必要的.程序运行的时候它们的确要占空间,并且可执行文件必须记录所有未初始化的全局变量和局部静态变量的大小综合,记为.bss段.所以.bss段只是为未初始化的全局变量和局部静态变量预留位置而已,它并没有内

浅谈linux 中的目标文件 即.o后缀名的文件

实际上 目标文件从结构上讲,已经非常接近可执行文件,只是没有经过链接的过程,所以其中有些符号或者地址还没有被调整. 实际上上在linux下 都是可以称之为ELF文件. 看一下这个图,a.out 就是我们的hello.c的执行文件.hello.o 就是目标文件 所以实际上他们2 几乎是一样的. 一般目标文件有很多属性,比如符号表啊,字符串之类的,然后目标文件 把这些属性 按照 segment的形式存储,也叫段.就是大家经常遇到的段错误 里的那个段. 一般来说程序代码被编译以后 主要分为程序指令和程

Python学习教程_Python学习路线:Python3里你不知道的秘密特性

Python学习教程_Python学习路线:Python3里你不知道的秘密特性 概述 到2020年,Python2的官方维护期就要结束了,越来越多的Python项目从Python2切换到了Python3.其实在实际工作中,很多伙伴都还是在用Python2的思维写Python3的代码.给大家总结一下Python3一些新的更方便的特性!希望你们看完后也能高效率的编写代码 f-strings (3.6+) 在Python里面,我们经常使用format函数来格式化字符串,例如: user = "Jane

曹工说Spring Boot源码(16)-- Spring从xml文件里到底得到了什么(aop:config完整解析【上】)

写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean Definition到底是什么,咱们对着接口,逐个方法讲解 曹工说Spring Boot源码(3)-- 手动注册Bean Definition不比游戏好玩吗,我们来试一下 曹工说Spring Boot源码(4)-- 我是怎么自定义ApplicationContext,从json文件读取bean de

对另一个布局文件里的Button按钮进行监听

布局文件里面的Button写上 onClick = “onClick”,然后在你当前Activity的onClick方法中根据Button的id来做相应的操作 android:id="@+id/single_file_download" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" androi

创建日志文件并在该文件里添加内容

'创建日志文件并在该文件里添加内容 Sub writelog(log) Const forreading =1,forwriting =2,foraddpending=8 Dim fso,f Dim filepath filepath ="C:\log\log.txt" Set fso =createobject("scripting.filesystemobject") If fso.FileExists(filepath) = false Then Set f

程序员的自我修养:(1)目标文件

程序员的自我修养:(1)目标文件 1.目标文件 1.1 编译与链接 在使用像Visual Studio或Qt Creator等IDE时,通常有一个叫做"构建"的按钮.当编辑完成要运行和测试时点一下它,程序就能跑起来了,所以我们很少关心编译和链接.其实,编译和链接合并在一起就称为 构建(Build).简单的一次按键,实际背后却是异常复杂的过程: 预编译(Preprocessing) 编译(Compilation) 扫描:算法类似有限状态机(FSM),将字符转换成Token. 语法分析:分