CN101937389A - 一种让代码分析工具获取被检测软件包编译过程的方法 - Google Patents

一种让代码分析工具获取被检测软件包编译过程的方法 Download PDF

Info

Publication number
CN101937389A
CN101937389A CN2009102592525A CN200910259252A CN101937389A CN 101937389 A CN101937389 A CN 101937389A CN 2009102592525 A CN2009102592525 A CN 2009102592525A CN 200910259252 A CN200910259252 A CN 200910259252A CN 101937389 A CN101937389 A CN 101937389A
Authority
CN
China
Prior art keywords
function
executable program
compiler
compiling
parameter
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN2009102592525A
Other languages
English (en)
Inventor
许中兴
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhang Yan
Original Assignee
BEIJING CODETEST INFORMATION TECHNOLOGY Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by BEIJING CODETEST INFORMATION TECHNOLOGY Co Ltd filed Critical BEIJING CODETEST INFORMATION TECHNOLOGY Co Ltd
Priority to CN2009102592525A priority Critical patent/CN101937389A/zh
Publication of CN101937389A publication Critical patent/CN101937389A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明提供一种让代码分析工具获取被检测软件包编译过程的方法,包括下列操作步骤:(1)实现执行可执行程序的函数,即编写用来替换***执行可执行程序的函数;(2)设置环境变量;(3)编译程序找到环境变量指定的库文件;(4)编译程序将编译命令和参数传给重载过后的执行可执行程序的函数;(5)执行可执行程序的函数记录编译命令,即从执行可执行程序的函数的参数中获取实际编译命令的信息;(6)调用***执行可执行程序的函数。本发明的目的在于不干扰正常编译过程的条件下,获取编译命令的顺序和参数,不仅针对不同的编译环境和构建方法而且能够完整进行编译过程,自动化程度高,适用范围广,不易出错。

Description

一种让代码分析工具获取被检测软件包编译过程的方法
技术领域
本发明涉及一种在软件源代码中检测缺陷的技术,确切的说,涉及一种基于代码分析工具与被测***编译过程相结合的软件源代码缺陷检测方法,属于计算机信息安全技术领域。
背景技术
代码缺陷检测工具在检测一个软件包时,需要获得该软件包正常编译的顺序和命令,从而可以对该软件包进行编译和检测。但是现有的软件包都有各自不同的编译环境和构建方法,这对代码检测工具获取软件包的完整编译方法造成了很大困难。
现有的一些方法,包括环境变量替换,人工修改工程文件,这些均具有自动化程度不高,适用范围窄等特点。环境变量替换是利用某些构建***在检测编译器时通过当前环境变量的值来获取当前编译器。通过修改环境变量,可以让构建***认为检测工具为当前编译器,从而将检测工具代入编译命令,执行检测过程。这种方法的缺陷在于软件并没被真正构建,在编译过程依赖先前编译的结果时,编译过程无法完整进行。人工修改工程文件是通过修改工程文件中跟编译相关的命令参数,将检测工具代入编译命令,达到检测目的。这种方法需要针对不同的工程文件进行不同的处理,费时费力,还容易出错。
发明内容
本发明的目的在于不干扰正常编译过程的条件下,获取编译命令的顺序和参数,不仅针对不同的编译环境和构建方法而且能够完整进行编译过程,自动化程度高,适用范围广,不易出错。
为实现上述发明目的,本发明所提供的技术方案的基本构思如下:
本发明提供一种让代码分析工具获取被检测软件包编译过程的方法,其特殊之处在于:包括下列操作步骤:
(1)实现执行可执行程序的函数,即编写用来替换***执行可执行程序的函数;
(2)设置环境变量;
(3)编译程序找到环境变量指定的库文件;
(4)编译程序将编译命令和参数传给重载过后的执行可执行程序的函数;
(5)执行可执行程序的函数记录编译命令,即从执行可执行程序的函数的参数中获取实际编译命令的信息;
(6)调用***执行可执行程序的函数。
所述步骤(1)中将执行可执行程序的函数编译成库文件。
所述步骤(2)所述设置环境变量是指将命令设置到环境变量里。
所述步骤(3)所述指定的库文件为执行可执行程序的函数编译成的库文件。
所述步骤(4)中重载执行可执行程序的函数的步骤如下:
(41)将编译程序传进的编译命令和参数按照用户需要的格式保存到指定的日志文件中;
(42)利用***库中提供的动态链接库操作函数,找到***提供的执行可执行程序的函数;
(43)将原始命令参数传给***的执行可执行程序的函数,进行调用;
(44)将结果返回调用者。
所述执行可执行程序的函数为exec()函数,所述***执行可执行程序的函数为***exec()库函数,所述环境变量为LD_PRELOAD环境变量。
所述库文件为libmyexec.so库文件。
所述命令指export LD_PRELOAD=libmyexec.so。
所述exec()函数为一个函数族,包括execv(),execve(),execvp()3个函数。
所述步骤(42)中的操作动态链接库的函数是指dlopen函数。
与现有的技术相比,本发明具有如下有益效果:
1、本发明是对软件包的构建进行集成的方法,解决了获取软件包编译顺序和参数的问题,使得代码编译检测工具可以完整、正确记录和再现软件包编译的全部过程。
2、通过设置环境变量的方式,让编译***在找到C***库之前找到我们实现的用来替换***可执行程序的函数的动态链接库。
3、在用来截获***可执行程序的函数中,我们重新编写了新的执行可执行程序的函数,它首先记录完整的编译命令参数,然后再调用真正的***可执行程序的函数。这样既获得了编译的命令,又不影响正常编译的进行,整个过程对于被编译的软件包来说是透明的。
4、通过重载动态链接库中编译相关的***调用的方式来截获编译过程,适用范围广,只要是具有动态链接库机制的平台都可以适用。即通过截获***调用的方法来获取整个编译的过程,适用于所有具有动态链接功能的操作***平台。获得的信息完整,因为没有命令可以绕过***调用而单独被***执行。同时对于被测软件包来说透明度高,完全不影响原来的编译过程。
附图说明
图1:现有技术原理图;
图2:是本发明原理图。
具体实施方式
下面结合附图,对本发明一种让代码分析工具获取被检测软件包编译过程的方法的主要处理步骤:
(1)实现exec()函数,即编写用来替换***exec()库函数的函数;将exec()函数编译成libmyexec.so库文件;
(2)设置环境变量;具体是将命令export LD_PRELOAD=libmyexec.so设置到LD_PRELOAD环境变量里;
(3)编译程序找到LD_PRELOAD环境变量指定的libmyexec.so库文件;
(4)编译程序将编译命令和参数传给重载过后的exec()函数;
exec()函数为一个函数族,包括execv(),execve(),execvp()3个函数,重载exec()函数所包括的3个函数的步骤如下:
(41)将编译程序传进的编译命令和参数按照用户需要的格式保存到指定的log文件中;
(42)利用dlopen库中提供的动态链接库操作exec()函数,找到***提供的真正的***exec()库函数;
(43)将原始命令参数传给真正的***exec()库函数,进行调用;
(44)将结果返回调用者。
(5)exec()函数记录编译命令,即从exec()函数的参数中获取实际编译命令的信息;
(6)调用***exec()库函数。
我们根据操作***执行用户命令的原理,设计了通过截获***调用的方法来获取整个编译的过程。我们以Linux为例,说明具体的截获方法。此原理也适用于所有具有动态链接功能的操作***平台。
在Linux***中,用户程序通常以调用***exec()库函数***调用的方式来执行新的命令。软件包的编译***也是如此。编译程序在确定了将要执行的编译命令之后,将其作为参数传给***exec()库函数。exec()创建一个新的进程即exec()函数,并在新进程中执行参数中指定的命令。于是,exec()函数就是一个可以看到所有编译命令的函数。我们需要的信息都可以在exec()函数处获得。
一般来说exec()都是在标准C程序库中,以动态链接的方式被调用。可以通过设置LD_PRELOAD环境变量的方式,让编译***在找到C***库之前找到我们实现的用来替换***exec()库函数的动态链接库。在用来截获***exec()库函数的库中,我们重新实现了新的exec()函数。在我们实现的exec()函数中,首先记录完整的编译命令参数,然后再调用真正的***exec()库函数。这样既获得了编译的命令,又不影响正常编译的进行。整个过程对于被编译的软件包来说是透明的。
通过重载动态链接库中编译相关的***调用的方式来截获编译过程,适用范围广,只要是具有动态链接库机制的平台都可以适用。获得的信息完整,因为没有命令可以绕过***调用而单独被***执行。同时对于被测软件包来说透明度高,完全不影响原来的编译过程。
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求范围当中。

Claims (8)

1.一种让代码分析工具获取被检测软件包编译过程的方法,其特征在于:包括下列操作步骤:
(1)实现执行可执行程序的函数,即编写用来替换***执行可执行程序的函数;
(2)设置环境变量;
(3)编译程序找到环境变量指定的库文件;
(4)编译程序将编译命令和参数传给重载过后的执行可执行程序的函数;
(5)执行可执行程序的函数记录编译命令,即从执行可执行程序的函数的参数中获取实际编译命令的信息;
(6)调用***执行可执行程序的函数。
2.根据权利要求1所述的方法,其特征在于,所述步骤(1)中将执行可执行程序的函数编译成库文件。
3.根据权利要求2所述的方法,其特征在于,所述步骤(2)所述设置环境变量是指将命令设置到环境变量里。
4.根据权利要求3所述的方法,其特征在于,所述步骤(3)所述指定的库文件为执行可执行程序的函数编译成的库文件。
5.根据权利要求4所述的方法,其特征在于,所述步骤(4)中重载执行可执行程序的函数的步骤如下:
(41)将编译程序传进的编译命令和参数按照用户需要的格式保存到指定的日志文件中;
(42)利用***库中提供的动态链接库操作函数,找到***提供的执行可执行程序的函数;
(43)将原始命令参数传给***的执行可执行程序的函数,进行调用;
(44)将结果返回调用者。
6.根据权利要求1所述的方法,其特征在于,所述执行可执行程序的函数为exec()函数,所述***执行可执行程序的函数为***exec()库函数,所述环境变量为LD-PRELOAD环境变量。
7.根据权利要求6所述的方法,其特征在于,所述exec()函数为一个函数族,包括execv(),execve(),execvp()3个函数。
8.根据权利要求5所述的方法,其特征在于,所述步骤(42)中的操作动态链接库的函数是指dlopen函数。
CN2009102592525A 2009-12-17 2009-12-17 一种让代码分析工具获取被检测软件包编译过程的方法 Pending CN101937389A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2009102592525A CN101937389A (zh) 2009-12-17 2009-12-17 一种让代码分析工具获取被检测软件包编译过程的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2009102592525A CN101937389A (zh) 2009-12-17 2009-12-17 一种让代码分析工具获取被检测软件包编译过程的方法

Publications (1)

Publication Number Publication Date
CN101937389A true CN101937389A (zh) 2011-01-05

Family

ID=43390729

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2009102592525A Pending CN101937389A (zh) 2009-12-17 2009-12-17 一种让代码分析工具获取被检测软件包编译过程的方法

Country Status (1)

Country Link
CN (1) CN101937389A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9110737B1 (en) 2014-05-30 2015-08-18 Semmle Limited Extracting source code
CN106325965A (zh) * 2015-06-24 2017-01-11 龙芯中科技术有限公司 操作***的编译方法和装置
US10048960B2 (en) 2014-12-17 2018-08-14 Semmle Limited Identifying source code used to build executable files
CN111124373A (zh) * 2019-12-26 2020-05-08 武汉精鸿电子技术有限公司 一种测试软件开发方法、装置及测试设备
US10810007B2 (en) 2017-12-29 2020-10-20 Microsoft Technology Licensing, Llc Classifying system-generated code

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9110737B1 (en) 2014-05-30 2015-08-18 Semmle Limited Extracting source code
US9612850B2 (en) 2014-05-30 2017-04-04 Semmle Limited Extracting source code
US9645804B2 (en) 2014-05-30 2017-05-09 Semmle Limited Extracting source code
US9946525B2 (en) 2014-05-30 2018-04-17 Semmle Limited Extracting source code
US10048960B2 (en) 2014-12-17 2018-08-14 Semmle Limited Identifying source code used to build executable files
CN106325965A (zh) * 2015-06-24 2017-01-11 龙芯中科技术有限公司 操作***的编译方法和装置
CN106325965B (zh) * 2015-06-24 2019-09-10 龙芯中科技术有限公司 操作***的编译方法和装置
US10810007B2 (en) 2017-12-29 2020-10-20 Microsoft Technology Licensing, Llc Classifying system-generated code
CN111124373A (zh) * 2019-12-26 2020-05-08 武汉精鸿电子技术有限公司 一种测试软件开发方法、装置及测试设备

Similar Documents

Publication Publication Date Title
CN101739339B (zh) 一种基于程序动态依赖关系的软件故障定位方法
CN106503563B (zh) 基于通用框架的批量漏洞检测方法
CN103577324B (zh) 移动应用中隐私信息泄露的静态检测方法
CN108073400A (zh) 软件自动化构建方法、服务器及存储介质
US20140096113A1 (en) Policy evaluation based upon dynmamic observation, static analysis and code change history
CN104077140A (zh) 用于持续集成的自动化编译方法和编译装置
CN102567164A (zh) 用于处理器的指令集批量测试装置与方法
CN104021084A (zh) 一种Java源代码缺陷检测方法及装置
CN102110051A (zh) 应用程序切片技术的静态缺陷检测方法
CN101937389A (zh) 一种让代码分析工具获取被检测软件包编译过程的方法
CN104156311A (zh) 一种基于cpu模拟器的嵌入式c语言目标码级单元测试方法
CN113836023B (zh) 一种基于体系结构交叉检查的编译器安全性测试方法
CN111752586A (zh) 跨架构的嵌入式设备固件未修补漏洞检测方法及***
Fu et al. Resurgence of regression test selection for c++
CN111428247A (zh) 一种对计算机漏洞库进行改进的方法
CN102521135B (zh) 线性***的测试方法和装置
KR20140088963A (ko) 애플리케이션 개발을 위한 런타임 에러 테스팅 시스템 및 방법
CN107480061B (zh) 一种基于Jenkins CI构建变化模块的自动化回归测试方法
US8930765B2 (en) Systems and methods for feedback driven regression testing
CN110737590A (zh) 一种离线调试方法
Phan et al. The Challenges of Shift Left Static Analysis
CN113051582B (zh) 一种计算机软件技术开发调试***
Singhal et al. A critical review of various testing techniques in aspect-oriented software systems
CN115795489A (zh) 一种基于硬件级进程跟踪的软件漏洞静态分析方法及装置
CN115080978A (zh) 一种基于模糊测试的运行时漏洞检测方法及***

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: ZHANG ?

Free format text: FORMER OWNER: BEIJING CODETEST INFORMATION TECHNOLOGY CO., LTD.

Effective date: 20111107

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20111107

Address after: 100085 Beijing city Haidian District Anning Zhuang three No. 9 Building 1 layer 2 5 unit 208

Applicant after: Zhang Yan

Address before: 100085 Beijing City, Haidian District road 25, 1303 small business Qinghe

Applicant before: Beijing Codetest Information Technology Co., Ltd.

C12 Rejection of a patent application after its publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20110105