[发明专利]一种代码改动的检测方法及装置有效
申请号: | 201310573480.6 | 申请日: | 2013-11-15 |
公开(公告)号: | CN103559449A | 公开(公告)日: | 2014-02-05 |
发明(设计)人: | 周功程 | 申请(专利权)人: | 华为技术有限公司 |
主分类号: | G06F21/57 | 分类号: | G06F21/57 |
代理公司: | 北京中博世达专利商标代理有限公司 11274 | 代理人: | 申健 |
地址: | 518129 广东*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 代码 改动 检测 方法 装置 | ||
技术领域
本发明涉及计算机领域,尤其涉及一种代码改动的检测方法及装置。
背景技术
随着近年来计算技术的迅猛发展,计算机产品的更新换代速度也随之增快。目前,在应用程序开发过程中,难免存在一些软件设计方面的漏洞或用户对该应用程序的新的需求,为了不影响应用程序的使用,一般以热补丁的方式对该应用程序进行漏洞修复或更新,即在不中止应用程序的情况下对该应用程序进行修复或更新。热补丁的处理方式基本是以函数为单位的,即可通过对出现漏洞或需要更新的函数进行修复,以实现对该应用程序的修复。
在计算机内部,程序文件有多种存在形态,如高级语言源代码,汇编代码,二进制代码等,各种形态都有他们的表示方式。其中二进制代码形态可以直接被机器理解执行,这种代码形态有多种文件格式,如OUT、ELF(Executable and Linkable Format,可执行连接格式)、COFF(Common Object File Format,通用对象文件格式)、PE(Portable Executable,可移植可执行格式)等。热补丁的实现需要进行编译操作之后的二进制代码文件,常用为ELF格式,其余的文件格式基本与ELF格式原理一致。如图1所示,链接视图(Linking View)是链接器关注的结构,执行视图(Execution View)是程序加载器关注的结构,它们是一个文件的不同表现。其中,Linking view 是编译过程中编译器角度看到的格式,而Execution view则是该代码加载到系统运行时,系统角度看到的格式。这两者内容不变,区别在于文件头的结构发生了变化。
热补丁技术操作的段落就是Linking view的中的节区(section)的内容,计算机通过控制编译器的编译属性,可以在ELF文件中增加任意的段。制作热补丁的过程中,就是对ELF文件中的section的内容进行查找和替换,这些section的内容可以通过预设的程序来读取分析。
进一步地,系统采用热补丁技术时,需要找出补丁函数发生了什么变化,进而在线替代这些变动的函数。为了实现这一功能,目前有很几种方法可用。如图2所示,有些热补丁系统从源代码层次进行比较;有些热补丁系统从二进制代码层次进行比较,由于这两种方案比较的都是ELF文件中section的内容,所以当需要修改的不是函数内容而是数据结构时,此方案就无法检测到数据结构的变化,进而遗漏需要进行补丁操作的相关程序;如图3所示,还有些热补丁通过在源代码中加入标记,进而在编译过程中直接提取出发生变化的函数,然而这种操作需要对每一个函数都加入标识宏,导致操作效率低,并且由于标识宏只对函数有效,因此如果是数据结构被修改,则采用这种方法将无法识别到数据结构的修改。
此外,以上现有技术的法案都不能很好地处理补丁函数中静态局部变量在编译之后的编译修饰问题。所述静态局部变量只在定义它的函数内有效,当函数返回后,该变量不会消失。所述编译修饰是指函数或者变量的名字修饰(Decorated Name),具体为编译器在编译期间创建的一个字符串,用来指明函数或者变量的定义或原型。计算机内部的链接程序或其他工具有时需要指定函数或变量的名字修饰来定位函数或变量的正确位置。然而同一个静态局部变量在进行不同编译操作后编译器在编译期间创建的字符串可能会发生改变,造成计算机无法定位函数或变量的正确位置,然而现有技术对这一问题仍然没有很好地解决方法。
发明内容
本发明的实施例提供一种代码改动的检测方法及装置,通过在两次编译过程中添加相同的预置调试信息,进一步对比编译信息后提取的不同预置调试信息链表,从而实现检测代码被修改的位置,同时实现了数据结构变化的检测。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,本发明的实施例提供一种代码改动的检测方法,包括:
获取修改后源代码;
对修改后的源代码进行编译,并在所述修改后的源代码中添加预置调试信息,以获得第一目标文件,所述预置调试信息用于对编译后的所述修改后的源代码进行分类;
重命名所述第一目标文件,以获得第一编译信息;
调用预置的Dwarf程序读取所述第一编译信息以及预先生成的第二编译信息,以获取与所述第一编译信息对应的多个链表,以及与所述第二编译信息对应的多个链表,所述第二编译信息为对添加有所述预置调试信息的未修改的源代码编译后生成的编译信息;
对所述与所述第一编译信息对应的多个链表,以及与所述第二编译信息对应的多个链表分别进行比较;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华为技术有限公司,未经华为技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310573480.6/2.html,转载请声明来源钻瓜专利网。
- 上一篇:涡流纺五彩纱线的加工工艺
- 下一篇:多股纱线直接加捻的倍捻机锭位