[发明专利]无痕可管理的源代码自动插桩方法无效
申请号: | 201110198582.5 | 申请日: | 2011-07-15 |
公开(公告)号: | CN102231109A | 公开(公告)日: | 2011-11-02 |
发明(设计)人: | 张天;陈华杰 | 申请(专利权)人: | 南京大学 |
主分类号: | G06F9/44 | 分类号: | G06F9/44 |
代理公司: | 南京天翼专利代理有限责任公司 32112 | 代理人: | 朱戈胜 |
地址: | 210093 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 无痕可 管理 源代码 自动 方法 | ||
技术领域
本发明涉及计算机程序动态分析,主要涉及一种无痕可管理的源代码插桩方法。该方法包括插桩点可视化、插桩点管理、插桩点定位、自动插桩框架、自动插桩性能优化五个部分。
背景技术
程序分析通常利用静态程序分析和动态程序分析对程序行为进行自动分析,进而提高软件质量。动态程序分析常借助于插桩方法来收集程序动态运行行为,某些与运行环境相关的程序行为只能通过插桩来收集,而静态程序分析无法进行分析。软件开发过程中,代码审查者在代码编写阶段完成后使用源代码插桩方法对代码进行审查,通常审查者拥有阅读源代码权限但不便对代码进行修改。通过对程序运行行为的分析尽早发现代码中的错误,进而提高软件质量。源代码插桩能够充分地利用程序语义、可视化地显示插桩代码、并且不会提高代码逻辑复杂性。
程序插桩技术,是在保证被测程序原有逻辑完整性的基础上在程序中插入一些探针,通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态信息,从而实现测试目的的方法。由于程序插桩技术是在被测程序中插入探针,然后通过探针的执行来获得程序的控制流和数据流信息,以此来实现测试的目的。因此,根据探针插入的时间可以分为目标代码插桩和源代码插桩。
现有插桩方法主要包括断言机制、字节码插桩、面向方面插桩等三类方法。断言机制直接在写源文件中添加插桩代码,将会降低代码阅读性。字节码插桩则直接对字节码文件进行修改,被插字节码的源代码无法可视化,且无法保证代码插入过程的正确性。面向方面插桩在程序纵向继承关系的基础上增加了横向方面关系,增加了程序的逻辑复杂性。
目前插桩技术主要存在插桩点及其代码可视化、被插代码管理、插桩点自动定位、自动插桩性能较低的问题。
发明内容
鉴于上述问题,本发明旨在提供一个源代码插桩方法,该方法不仅支持手动插桩,并且支持批量自动插桩。其主要特点有插桩代码可视化、插入代码集中管理、插桩过程无痕化、插桩点自动化定位、自动插桩可扩展性和自动插桩高效性。
本发明是通过以下技术方案实现的:
一种无痕可管理的源代码自动插桩方法,步骤包括:
步骤40:开始,打开一个工程;
步骤41:定义一个文件过滤器,对所需插桩的工程进行匹配,保留匹配的工程;
步骤42:接着使用所述文件过滤器对被插桩的源文件进行过滤;
步骤43:选择自动插桩的具体应用类型,定义相应类型所需插桩的代码;
步骤44:用语法树结构匹配,根据自动插桩的具体应用类型进行相应插桩点的位置定位,并在相应位置插入代码,生成一个新源文件;
步骤45:所述新源文件进行编译产生新的可执行字节码文件,并保存;
步骤46:生成可执行文件,结束。
本自动插桩方法提供了元插桩类型重用框架,包括元插桩操作组合器和元插桩类型池,其中,
元插桩类型池包括多个元插桩类型,并且支持添加新的元插桩类型;
元插桩操作组合器将多个元插桩类型组合到一起,通过遍历一次语法树完成在语法树上多种类型的插桩操作;
所述元插桩类型支持对不同类型插桩进行插桩,且每一个元插桩类型只能针对某一类型元插桩进行插桩。
所述步骤41中,对所需插桩的工程进行匹配,包括匹配工程中的包、文件、和方法。
所述步骤42中,所述源文件过滤的步骤包括:
步骤60:开始:源文件过滤是对某一工作空间所有源文件进行过滤;
步骤61:先判断该工作空间是否包含其它工程,如没有则跳转到步骤64,若有则进入步骤62;
步骤62:匹配工程名,如果匹配则进入步骤63,如果不匹配则返回步骤61继续查看是否有下一个工程;
步骤63:如果工程名匹配,说明该工程需要进行插桩,将其添加到插桩工程集合中,然后跳回至步骤61;
步骤64:进行包的过滤,先判断工程集合中的工程是否包含其它包(此处其它包的说明:Java工程中包括多个package,逐个包进行过滤,看看还有没有其它包没有进行过滤。包是指java语言中package的概念),如没有则跳转到步骤67开始进行文件的过滤,若有则进入步骤65;
步骤65:匹配包名,若匹配则进入步骤66,若不匹配则回到步骤64继续查看是否有下一个包;
步骤66:匹配包名,若相匹配,说明该包需要进行插桩,将其添加到插桩包集合中,然后跳回至步骤64;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110198582.5/2.html,转载请声明来源钻瓜专利网。