[发明专利]一种代码改动的检测方法和装置有效
申请号: | 201210504577.7 | 申请日: | 2012-11-30 |
公开(公告)号: | CN103077062A | 公开(公告)日: | 2013-05-01 |
发明(设计)人: | 李俊 | 申请(专利权)人: | 华为技术有限公司 |
主分类号: | G06F9/45 | 分类号: | G06F9/45 |
代理公司: | 广州三环专利代理有限公司 44202 | 代理人: | 郝传鑫;熊永强 |
地址: | 518129 广东*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 代码 改动 检测 方法 装置 | ||
技术领域
本发明属于计算机领域,尤其涉及一种代码改动的检测方法和装置。
背景技术
软件的生产和使用过程中,经常会发现各种潜在的问题,解决的方法一般是为该软件创建一个源代码级的补丁。热补丁是一种可以修复软件漏洞的代码,其特点是不会中断软件的运行,只需要对源代码中待改动的函数进行修改或替换即可,即通过分析程序找出那些函数代码发生了变化,从而可以替代这些函数代码,在运行过程中替换函数来达到热补丁的效果。
现有技术中,对于识别和定位发生变化的程序代码的方法,分成两种不同的实现方案,一种是通过分析对比源代码来识别,另一种是通过比较程序编译之后的二进制文件来识别。其中,第一种方法复杂度比较高,而且有诸多限制,如inline类型的函数就无法知道其最后的编译效果,从而导致无法提取真正有效的函数变动代码,识别的准确度得不到保证;而第二种方法需要编译补丁前和补丁后两个程序,然后比较编译好之后的二进制代码,复杂度较高,比较耗时,而且这种方法需要使用较多的编译器选项,有些编译选项可能存在冲突,从而影响识别的可靠性。
发明内容
本发明实施例的目的在于提供一种代码改动的检测方法和装置,旨在更高效地检测识别出发生改动的代码,降低识别的复杂度,并提高识别的准确度和可靠性。
本发明实施例是这样实现的,第一方面,本发明实施例提供一种代码改动的检测方法,所述方法包括:
为源代码中待改动的函数添加标记,所述标记用于在所述源代码编译后得到的二进制文件中定位所述待改动的函数;
将所述源代码编译为二进制文件,根据所述标记获取所述待改动的函数在所述二进制文件中的位置信息和重定位信息。
在第一方面的第一种可能的实施方式中,所述为源代码中待改动的函数添加标记,包括:
创建包含外部接口的标记,所述标记为:代码或提取信息的宏;
通过所述外部接口将所述标记添加到源代码中待改动的函数。
在第一方面的第二种可能的实施方式中,所述根据所述标记获取所述待改动的函数在所述二进制文件中的位置信息和重定位信息,包括:
执行所述标记以获取所述待改动函数在所述二进制文件中的信息,将所述信息与二进制文件中的符号表进行对比,根据所述对比的结果得出所述待改动函数在所述二进制文件中的位置信息,所述待改动函数在所述二进制文件中的信息包括:所述待改动函数在所述二进制文件中的函数名、或所述待改动函数在所述二进制文件中的开始地址;
为所述待改动的函数增加编译属性,增加的所述编译属性用于将所述待改动的函数保存到所述二进制文件的独立的段中,根据所述编译属性再次将所述源代码编译为二进制文件,并获取所述待改动的函数在所述二进制文件中的重定位信息。
结合第一方面的第二种可能的实施方式,在第三种可能的实施方式中,所述将所述信息与二进制文件中的符号表进行对比,根据所述对比的结果获取所述待改动函数在所述二进制文件中的位置信息,包括:
如果所述信息为所述待改动函数在所述二进制文件中的函数名,则将所述待改动函数在所述二进制文件中的函数名与二进制文件中的符号表进行对比,以查询得出所述待改动函数在所述二进制文件中的开始地址;
如果所述信息为所述待改动函数在所述二进制文件中的开始地址,则将所述待改动函数在所述二进制文件中的开始地址与二进制文件中的符号表进行对比,以查询得出所述待改动函数在所述二进制文件中的函数名;
将所述待改动函数在所述二进制文件中的函数名和开始地址作为所述待改动函数在所述二进制文件中的位置信息。
第二方面,本发明实施例提供一种代码改动的检测装置,所述装置包括:
标记添加单元,用于为源代码中待改动的函数添加标记,所述标记用于在所述源代码编译后得到的二进制文件中定位所述待改动的函数;
编译单元,用于将经过所述标记添加单元添加标记的源代码编译为二进制文件;
信息获取单元,用于根据所述标记添加单元添加的标记获取所述待改动的函数在在所述编译单元编译的二进制文件中的位置信息和重定位信息。
在第二方面的第一种可能的实施方式中,所述标记添加单元具体包括:
标记创建子单元,用于创建包含外部接口的标记,所述标记为:代码或提取信息的宏;
添加子单元,用于通过所述外部接口将所述标记创建子单元创建的标记添加到源代码中待改动的函数。
在第二方面的第二种可能的实施方式中,所述信息获取单元具体包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华为技术有限公司,未经华为技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210504577.7/2.html,转载请声明来源钻瓜专利网。