首页 > 其他分享 >目标文件的格式

目标文件的格式

时间:2023-09-20 23:32:26浏览次数:39  
标签:可执行文件 文件 Windows ELF 目标 Linux 格式

编译器编译源代码后生成的文件叫做目标文件.

目标文件从结构上讲,它是已经编译后的可执行文件格式,只是还没有经过链接的过程,其中可能有些符号或有些地址还没有被调整。其实它本身就是按照可执行文件格式存储的,只是跟真正的可执行文件在结构上稍有不同。

现在PC平台流行的可执行文件格式(Executable)主要是Windows下的PE ( PortableExecutable)和Linux的ELF (Executable Linkable Format),它们都是COFF(Common fileformat〉格式的变种。

目标文件就是源代码编译后但未进行链接的那些中间文件( Windows的.obj和 Linux 下的.o),它跟可执行文件的内容与结构很相似,所以一般跟可执行文件格式一起采用一种格式存储。从广义上看,目标文件与可执行文件的格式其实几乎是一样的,所以我们可以广义地将目标文件与可执行文件看成是一种类型的文件,在Windows下,我们可以统称它们为PE-COFF文件格式。在Linux 下,我们可以将它们统称为ELF文件。

不光是可执行文件(Windows的.exe 和 Linux下的ELF可执行文件)按照可执行文件格式存储。动态链接库(DLL,Dynamic Linking Library)( Windows的.dll和 Linux 的.so)及静态链接库(Static Linking Library)( Windows 的.lib和 Linux 的.a)文件都按照可执行文件格式存储。它们在 Windows下都按照 PE-COFF格式存储,Linux下按照ELF格式存储。静态链接库稍有不同,它是把很多目标文件捆绑在一起形成一个文件,再加上一些索引,你可以简单地把它理解为一个包含有很多目标文件的文件包。ELF文件标准里面把系统中采用ELF格式的文件归为如下表所列举的4类。

ELF文件类型

说明

实例

可重定位文件( Relocatable File )

这类文件包含了代码和数据,可以被用来链接成可执行文件或共享目标文件,静态链接库也可以归为这一类

Linux的.o、Windows的.obj

可执行文件( Executable File )

这类文件包含了可以直接执行的程序,它的代表就是ELF可执行文件,它们一般都没有扩展名

比如/bin/bash文件Windows 的.exe

共享目标文件( Shared Object File )

这种文件包含了代码和数据,可以在以下两种情况下使用。一种是链接器可以使用这种文件跟其他的可重定位文件和共享目标文件链接,产生新的目标文件。第二种是动态链接器可以将几个这种共享目标文件与可执行文件结合,作为进程映像的一部分来运行

Linux的.so ,如/liblglibc-2.5.so、Windows的DLL

核心转储文件( Core Dump File )

当进程意外终止时,系统可以将该进程的地址空间的内容及终止时的一些其他信息转储到核心转储文件

Linux下的core dump

我们可以在 Linux下使用file命令来查看相应的文件格式,上面几种文件在file命令下会显示出相应的类型:

目标文件的格式_目标文件

标签:可执行文件,文件,Windows,ELF,目标,Linux,格式
From: https://blog.51cto.com/u_16188116/7544504

相关文章

  • systemd path:实时监控文件和目录的变动
    回到Systemd系列文章大纲systemdpath:实时监控文件和目录的变动systemdpath工具提供了监控文件、目录变化并触发执行指定操作的功能。有时候这种监控功能是非常实用的,比如监控到/etc/nginx/nginx.conf或/etc/nginx/conf.d/发生变化后,立即reloadnginx。虽然,用户也可以使用in......
  • 前端上传文件的基本方法
    前言处理用户选择的文件并将之上传至服务器,这属于是前端开发的基本功。虽然现在有各种框架和插件能够很简单地实现文件上传功能,但是作为一个有追求的前端,还是有必要了解以下前端文件上传的基本原理的。^-^使用FormData对象上传文件我们可以使用FormData对象来创建一个表......
  • 文件/目录的权限和归属 访问权限 读取:允许查看文件内容、显示目录列表 写入:允许修改
    文件/目录的权限和归属 访问权限读取:允许查看文件内容、显示目录列表写入:允许修改文件内容,允许在目录中新建、移动、删除文件或子目录可执行:允许运行程序、切换目录归属(所有权)属主:拥有改文件或目录的用户账号属组:拥有该文件或目录的组账号,组中用户查看文件/目录的权限和归属......
  • 我的 Windows 文件管理哲学
    前言  作为一个不合格的Geek,我经常面临把Windows弄崩溃的尴尬处境,我的系统因此重装了一遍又一遍……不过在一次次的重装中,我逐渐总结出了于我个人而言行之有效的文件管理哲学,在此略做总结。管理方法磁盘分区  我个人对磁盘分区没有什么特别的需求,现代的操作系统与电脑......
  • 【漏洞复现】亿赛通 电子文档安全管理系统 DecryptApplicationService2 任意文件上传
    1、简介亿赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业校心重要数据资产,对电子文档进行全生命周期防护,系统具有透明加密、主动加密、智能加密等多种加密方式,用户可......
  • Ansible专栏文章之六:组织多个文件以及Role
    回到:Ansible系列文章各位读者,请您:由于Ansible使用Jinja2模板,它的模板语法{%raw%}{{}}{%endraw%}和{%raw%}{%%}{%endraw%}和博客系统的模板使用的符号一样,在渲染时会产生冲突,尽管我尽我努力地花了大量时间做了调整,但无法保证已经全部都调整。因此,如果各位阅读时发......
  • 自定义读取指定目录下下文件
    publicclassPropertiesUtil{privatestaticfinalStringPath="config/param.properties";/***读取配置文件中key的对应值*/publicstaticStringqueryValue(Stringkey){if(StringUtils.isBlank(key))return"";......
  • 时间格式化以及指定时区(time&&timezone)
    工作中经常遇到按照指定格式的时间进行展示。可参考以下脚本逻辑满足需求Date.prototype.PtTimeByFormat=function(fmt){varo={"M+":this.getMonth()+1,//月份"d+":this.getDate(),//日"H+":this.getHours(),//小时"m+":this.getMi......
  • 时间格式化以及指定时区(time&&timezone)
    工作中经常遇到按照指定格式的时间进行展示。可参考以下脚本逻辑满足需求Date.prototype.PtTimeByFormat=function(fmt){varo={"M+":this.getMonth()+1,//月份"d+":this.getDate(),//日"H+":this.getHours(),//小时"m+":this.getMi......
  • 响应头:关于文件下载的Content-Disposition和Content-Type(转载)
    Content-Type实体头部用于指示资源的MIME类型,在响应中,Content-Type标头告诉客户端实际返回的内容的类型,指示客户端如何显示附加的文件。  Content-Disposition是MIME协议的扩展,指示回复的内容该以何种形式展示,是以内联的形式(即网页或者页面的一部分,这种方式就与Content-Type......