一种编译链接方法及装置的制作方法

文档序号:6375876阅读:122来源:国知局
专利名称:一种编译链接方法及装置的制作方法
技术领域
本发明涉及通信领域,尤其涉及一种编译链接方法及装置。
背景技术
在软件开发的过程中,为了利于软件的开发和维护,一个大型软件的功能被分成不同的模块。这些模块被单独进行开发,即把高级语言(如c,c++等)翻译为机器语言(根据处理器的不同会有不同的定义),然后生成目标文件,再通过链接器将各个模块的目标文件链接为一个可执行程序,其中,各个模块包括各个模块相应的全局变量及指令。

现有技术实现将各个模块的目标文件链接为一个可执行程序的方法是,直接将各个模块相应的全局变量的目标文件合并、相应的指令合并,以生成最终的可执行程序,例如,一个软件的功能被分为A、B两个模块,模块A包括模块A的全局变量及模块A的指令,模块B包括模块B的全局变量及模块B的指令,现有技术即是直接将模块A的全局变量的编译后的目标文件与模块B的全局变量的编译后的目标文件合并、将模块A的指令与模块B的指令合并,以生成最终的可执行程序。但是,采用现有技术链接成的可执行程序,在程序运行时,由于某些软件缺陷,会导致调用某个模块的数据产生越界操作而改写其他模块的数据的情况,例如,当模块A的目标文件被调用时,若产生越界操作,则可能修改了模块B的目标文件,这必然导致的结果是该可执行程序无法正常执行。

发明内容
本发明的实施例提供一种编译链接方法及装置,通过增设保护区,以便当保护区被改写时,保护区能够隔离改写该保护区的目标文件,进而保障了其他模块的目标文件不被改写。为达到上述目的,本发明的实施例采用如下技术方案本发明实施例提供一种编译链接方法,该方法包括获取至少两个模块的全局变量;分别编译所述至少两个模块的全局变量,生成与所述至少两个模块对应的至少两个目标文件;当链接所述至少两个目标文件时,在所述至少两个目标文件后分别增设保护区,进而生成可执行程序,以使得当保护区被改写时,所述保护区隔离改写所述保护区的目标文件。本发明实施例还提供一种编译链接装置,该装置包括编译器,用于在获取至少两个模块的全局变量后,分别编译所述至少两个模块的全局变量,生成与所述至少两个模块对应的至少两个目标文件,并将所述至少两个目标文件传输给链接器;链接器,用于在接收来自所述编译器的所述至少两个目标文件后,链接所述至少目标文件时,在所述至少两个目标文件后分别增设保护区,以使得当保护区被改写时,所述保护区隔离改写所述保护区的目标文件。本发明实施例所提供的编译链接的方法及装置,通过在获取至少两个模块的全局变量后,分别编译至少两个模块的全局变量,以生成与至少两个模块对应的至少两个目标文件,并且,当链接该至少两个目标文件时,在至少两个目标文件后分别增设保护区,进而生成可执行程序,以使得当保护区被改写时,保护区隔离改写保护区的目标文件。通过该方案,由于在各个模块的全局变量所编译后的目标文件后增设了保护区,因此在某些模块越界操作时,保护区能够及时隔离改写该保护区的目标文件,不但能够保障其他模块的目标文件不被改写也能够尽快排除故障。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附 图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图I为本发明实施例提供的编译链接方法流程示意图一;图2为本发明实施例提供的编译链接方法流程示意图二 ;图3为本发明实施例提供的模块结构示意图一;图4为现有技术的模块结构示意图;图5为本发明实施例提供的模块结构示意图二;图6为本发明实施例提供的MMU、CPU与内存的连接示意图;图7为本发明实施例提供的编译链接装置结构示意图一;图8为本发明实施例提供的编译链接装置结构示意图二。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明实施例提供一种编译链接方法,如图I所示,该方法包括SlOl、编译链接装置获取至少两个模块的全局变量。由于一个软件的功能被分为多个模块分别进行开发,因此编译链接装置若要将各个模块链接为一个可执行程序,首先需要获取各个模块的全局变量。这里,模块的全局变量是指作用于整个源程序的在函数外部定义的变量。S102、编译链接装置分别编译至少两个模块的全局变量,生成与至少两个模块对应的至少两个目标文件。在获取至少两个模块的全局变量后,编译链接装置会对该至少两个模块的全局变量进行编译,进而生成与至少两个模块对应的至少两个目标文件。这里的“编译”是指,把“高级语言”翻译为“机器语言”,其中,高级语言可以为C语言、C++语言等,机器语言则根据不同的要求有不同的定义,具体地,编译链接装置对该至少两个模块的全局变量进行编译的步骤可以由编译器来执行。S103、当链接至少两个目标文件时,编译链接装置在至少两个目标文件后分别增设保护区,进而生成可执行程序,以使得当保护区被改写时,保护区隔离改写保护区的目标文件。编译链接装置在编译至少两个模块的全局变量,生成至少两个目标文件后,编译链接装置会链接至少两个目标文件,链接时编译链接装置在至少两个目标文件后分别增设保护区。示例性的,编译链接装置在至少两个目标文件后分别增设保护区的方法可以为在至少两个目标文件的链接脚本后分别增加程序“林Protect = ;= ALIGN(4096)+4096”,其中,“ ”代表某一个模块的目标文件的名称,“ =ALIGN (4096) +4 096 ”代表保护区的结束地址,具体的编译链接的脚本后续实施例中会给出。由于在各个模块的目标文件后增设了保护区,因此当保护区被某个模块的目标文件的越界操作所改写时,保护区能够及时隔离该目标文件,以保护其他模块的数据免遭破坏。至此,编译链接装置将增设有保护区后的至少两个模块的目标文件合并,将至少两个模块的指令合并,生成可执行程序。本发明实施例提供的一种编译链接方法,通过在获取至少两个模块的全局变量后,分别编译至少两个模块的全局变量,以生成与至少两个模块对应的至少两个目标文件,并且,当链接该至少两个目标文件时,在至少两个目标文件后分别增设保护区,进而生成可执行程序,以使得当保护区被改写时,保护区隔离改写保护区的目标文件。通过该方案,由于在各个模块的全局变量所编译后的目标文件后增设了保护区,因此在某些模块越界操作时,保护区能够及时隔离改写该保护区的目标文件,不但能够保障其他模块的目标文件不被改写,也能够尽快排除故障。本发明实施例提供的一种编译链接方法,如图2所示,该方法包括S201、编译链接装置获取至少两个模块的全局变量。在将多个模块链接为一个可执行程序前,编译链接装置首先需要获取各个模块的
全局变量。S202、编译链接装置分别编译至少两个模块的全局变量,生成与至少两个模块对应的至少两个目标文件。S203、当链接至少两个目标文件时,编译链接装置在至少两个目标文件后分别增设保护区,进而生成可执行程序,以使得当保护区被改写时,保护区隔离改写保护区的目标文件。结合步骤S202和步骤S203,对编译链接装置如何在各个模块在链接时增设保护区,并将各个模块链接为一个可执行程序的进行说明。示例性的,如图3所示,以存在两个模块,分别为模块A和模块B进行描述,一个软件的功能被分为A、B两个模块,模块A包括模块A的全局变量及模块A的指令,模块B包括模块B的全局变量及模块B的指令(code),具体的,模块A的全局变量包括初始化了的全局变量(data)和未初始化的全局变量(bss),模块A的全局变量包括初始化了的全局变量(data)和未初始化的全局变量(bss)。在获取模块A的全局变量和模块B的全局变量后,编译链接装置会对模块A的全局变量和模块B的全局变量进行编译,进而生成与模块A的全局变量对应的目标文件和与模块B的全局变量对应的目标文件。这里的“编译”是指,把“高级语言”翻译为“机器语言”,其中,高级语言可以为C语言、C++语言等,机器语言则根据不同的要求有不同的定义。如图4所示,现有技术即是直接将模块A的全局变量的编译后的目标文件与模块B的全局变量的编译后的目标文件合并、将模块A的指令与模块B的指令合并,以生成最终的可执行程序,即对应于模块A的初始化了的全局变量(data)的目标文件与对应于模块B的初始化了的全局变量(data)的目标文件合并,对应于模块A的未初始化的全局变量(bss)的目标文件与对应于模块B的未初始化的全局变量(bss)的目标文件合并,模块A的指令(code)与模块B的指令(code)合并,进而,将模块A和模块B链接在一起以生成最终的可执行程序。如图5所示,本发明实施例所提供的编译链接方法,在对应于各个模块的全局变量的目标文件后增设保护区后合并,以生成最终的可执行程序,即将增设了保护区的对应于模块A的初始化了的全局变量(data)的目标文件与增设了保护区的对应于模块B的初始化了的全局变量(data)的目标文件合并,将增设了保护区的对应于模块A的未初始化的全局变量(bss)的目标文件与增设了保护区的对应于模块B的未初始化的全局变量(bss)的目标文件合并,模块A的指令(code)与模块B的指令(code)合并,进而,生成最终的可执行程序。示例性的,假设目前系统中存在两个模块A和模块B以及第三方库文件C,需要将它们链接为一个可执行程序,使得他们能在PPC (Power Personal Computer, Power PC处理器)上运行,这里,第三方库文件是指无法看到源代码的数据库。首先编译链接装置将所要编译的模块A和模块B编译成目标文件,分别为模块A. ο和模块B. ο,然后使用链接脚本,把模块A. O、模块B. ο和第三方库文件C链接成可执行程序。编译链接脚本如下L
权利要求
1.一种编译链接方法,其特征在于,包括 获取至少两个模块的全局变量; 分别编译所述至少两个模块的全局变量,生成与所述至少两个模块对应的至少两个目标文件; 当链接所述至少两个目标文件时,在所述至少两个目标文件后分别增设保护区,进而生成可执行程序,以使得当保护区被改写时,所述保护区隔离改写所述保护区的目标文件。
2.根据权利要求I所述的数据区的编译链接方法,其特征在于,所述保护区所占的空间为4096字节。
3.根据权利要求I或2所述的数据区的编译链接方法,其特征在于,所述保护区的权限为只读,所述只读用于指示所述保护区不允许被改写。
4.根据权利要求1-3任意一项所述的数据区的编译链接方法,其特征在于,所述保护区的起始地址均为4096*N,所述N为正整数。
5.根据权利要求1、2或4任意一项所述的数据区的编译链接方法,其特征在于,还包括 当执行所述可执行程序时,周期性或非周期检测所述保护区是否被改写。
6.一种编译链接装置,其特征在于,包括 编译器,用于在获取至少两个模块的全局变量后,分别编译所述至少两个模块的全局变量,生成与所述至少两个模块对应的至少两个目标文件,并将所述至少两个目标文件传输给链接器; 链接器,用于在接收来自所述编译器的所述至少两个目标文件后,链接所述至少目标文件时,在所述至少两个目标文件后分别增设保护区,以使得当保护区被改写时,所述保护区隔离改写所述保护区的目标文件。
7.根据权利要求6所述的编译链接装置,其特征在于,所述保护区所占的空间为4096字节。
8.根据权利要求6或7所述的编译链接装置,其特征在于,所述保护区的起始地址均为4096*N,所述N为正整数。
9.根据权利要求6-8任意一项所述的编译链接装置,其特征在于,所述保护区的权限为只读,所述只读用于指示所述保护区不允许被改写。
10.根据权利要求6-8任意一项所述的编译链接装置,其特征在于,还包括 处理器,用于当执行所述可执行程序时,周期性或非周期检测所述保护区是否被改写。
全文摘要
本发明实施例提供的一种编译链接方法及装置,涉及通信领域,能够通过增设保护区,以便当保护区被改写时,保护区能够隔离改写该保护区的目标文件,进而保障了其他模块的目标文件不被改写。该方法包括获取至少两个模块的全局变量;分别编译至少两个模块的全局变量,生成与至少两个模块对应的至少两个目标文件;当链接至少两个目标文件时,在至少两个目标文件后分别增设保护区,进而生成可执行程序,以使得当保护区被改写时,保护区隔离改写保护区的目标文件。
文档编号G06F9/44GK102880461SQ201210312899
公开日2013年1月16日 申请日期2012年8月29日 优先权日2012年8月29日
发明者支雷磊 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1