首页 理论教育 软件工程专业导论:链接器的工作过程和目标文件

软件工程专业导论:链接器的工作过程和目标文件

时间:2023-10-23 理论教育 版权反馈
【摘要】:图4-2 链接器的工作过程目标文件是一个文件,在Intel X-86的计算机结构中,一般用obj作为文件扩展名,即*.obj。EXE 文件是可以直接装入计算机系统运行的文件。·动态链接信息。这样,才能把某种编译器编译出来的obj文件能够用其他厂商的链接器装配起来。链接器就是把各种代码的“螺钉和螺母”装到一起的工具。图4-3 ELF的文件格式可执行文件极易感染病毒,因为很容易改写可执行文件的一些参数,例如,改变代码指令的执行地址为病毒指令的地址。

软件工程专业导论:链接器的工作过程和目标文件

链接器(Linker)是一个工具程序,目的是把多个程序的目标代码(obj)文件和系统的库代码装配为一个可执行的文件格式,工作过程的示意图如图4-2所示。当然,目标代码必须是同一种机器的代码。

图4-2 链接器的工作过程

目标文件(Object file或称obj文件)是一个文件,在Intel X-86的计算机结构中,一般用obj作为文件扩展名,即*.obj。这是编译后得到的目标机器的指令集合和说明,但不能直接执行。

链接过程是把多个obj文件、以及Lib文件等,装配到一起,形成一个可执行文件(EXE文件)、新的静态链接库库文件(Lib文件)或动态链接库库文件(DLL 文件)。EXE 文件是可以直接装入计算机系统运行的文件(参见4.1.4节)。

Obj文件的格式一般是编译厂商和计算机硬件厂商共同制定的,目的是让不同的编译厂商的编译器能够编译出统一格式的obj格式文件,便于链接。

一般来讲,obj文件由如下的几个部分组成。

·头部(Header):文件的描述性和控制信息,例如,文件的长度,代码段从那个地址开始等。

·代码段(Code segment),放置可执行的二进制指令。

·数据段(Data segment),放置初始化的静态变量

·只读数据段(rodata,Read-only data segment),放置初始化的静态常数。

·BSS段(BSS segment),放置未初始化的静态数据,包括变量和常数。

·外部定义和引用的链接,说明本obj文件引用或包含了哪些外部定义,例如,C 语言的#Include包含的<Stdio.h>中定义的变量等。

·重定位信息。(www.xing528.com)

·动态链接信息。

·调试(Debugging)信息。

常见的obj格式是COFF,COFF(Common Object File Format)是针对UNIX 系统制定的可执行代码、目标码和共享库文件格式。

制定一个obj文件格式,必须对文件中的每个部分,每个字节都要说明清楚。这样,才能把某种编译器编译出来的obj文件能够用其他厂商的链接器装配起来。一旦obj的格式制定完成,轻易不会做改动,如机械工程中的螺钉与螺母的标准规格一样。链接器就是把各种代码的“螺钉和螺母”装到一起的工具。

obj文件格式的另一种格式是ELF(Executable and Linkable Format),也源于UNIX System V4。1999年以后,ELF主要用于Intel公司的X86系列的可执行文件、目标和共享库的格式,其格式如图4-3所示。

ELF头部定义该文件32位地址或64位地址。头部包含其他部分的偏移地址。对于32位的地址头部有52个字节,64位地址的有64个字节。

Program 头部表,告诉系统如何创立可执行文件。有一个文件偏移e_phoff,分为e_phnum 入口和e_phentsize两个值。

Section头部表,说明每个段(section)的地址等相关信息。图4-3有三个段,其中的.Text段存放代码的指令,.rodata段存放只读数据,.data段是可读可写的数据区。

图4-3 ELF的文件格式

可执行文件极易感染病毒,因为很容易改写可执行文件的一些参数(特别是头部的参数),例如,改变代码指令的执行地址为病毒指令的地址。这样,在代码执行时,先执行到的是病毒程序的代码,将病毒程序驻留在内存,取得操作系统的控制权,从而可以完成病毒的复制和一些破坏性操作,然后再执行原文件的程序代码,实现原程序的功能,因此用户感觉不到。

可执行文件病毒主要感染系统的可执行文件,例如Windows系统的.com 或.exe文件或者.dll文件,但极少感染数据文件。

注意:将操作系统和可执行文件等与数据文件分开,能有效地保护你的数据文件。例如,把磁盘划分为C 和D 两个磁盘,C 盘作为系统盘,安装可执行软件,D 盘存放数据文件。这样,一旦C盘感染了病毒,可以彻底将C盘格式化,而不会丢失D 盘的数据(文件)。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈