基于指令伪装的程序编译抓取系统及方法与流程

文档序号:16879586发布日期:2019-02-15 22:00阅读:197来源:国知局
基于指令伪装的程序编译抓取系统及方法与流程
本发明涉及程序项目编译抓取
技术领域
,特别涉及一种基于指令伪装的程序编译抓取系统及方法。
背景技术
:静态分析技术是指在不执行程序的前提下,通过语法分析、控制流与数据流处理等方法对代码进行分析,对程序的规范性、安全性和可靠性等指标进行检验的程序分析技术。在静态分析传统的处理方法中,需要对程序进行手动指定,此外还需要手动对程序进行预处理等操作,而这在实际的使用中,特别是面向较大规模程序项目有较大的不便。技术实现要素:本发明旨在至少在一定程度上解决相关技术中的技术问题之一。为此,本发明的一个目的在于提出一种基于指令伪装的程序编译抓取系统。本发明的另一个目的在于提出一种基于指令伪装的程序编译抓取方法。为达到上述目的,本发明一方面提出了一种基于指令伪装的程序编译抓取系统,包括:指令伪装模块用于获取抓取对象的当前使用指令,以将伪装指令替代所述当前使用指令,并指示编译抓取方法执行所述伪装指令;指令参数处理模块用于根据所述伪装指令的关键信息识别指令执行类型,并得到所述当前使用指令的源头文件和目标文件;依赖文件抓取模块用于根据所述指令执行类型获取执行所述伪装指令过程中所有中间文件、链接库、依赖文件和/或编译结果文件,获取并存储抓取的结果文件。本发明实施例的基于指令伪装的程序编译抓取系统,通过对程序的实际编译中使用的配置进行处理,可以直接提供给静态分析技术或其他处理进行程序的规范性、安全性和可靠性的检验等,且编译抓取的过程中不需要人工的参与;通过指令伪装的方式使得编译指令的兼容性更好,支持并行编译,同时也避免编译过程中文件删除导致的编译抓取时文件丢失等情况,且更加具备安全性和正确性;另外,没有额外第三方的资源依赖,抓取本身不受平台的限制,可以在不同的平台上解决目标问题。另外,根据本发明上述实施例的基于指令伪装的程序编译抓取系统还可以具有以下附加的技术特征:进一步地,在本发明的一个实施例中,所述指令伪装模块是修改执行时系统环境中指令路径映射关系,以替换所述当前使用指令,其中,在调用所述伪装指令时,首先执行当前指令,以在执行完所述当前指令后,指示编译抓取。进一步地,在本发明的一个实施例中,所述指令执行类型包括中间文件生成类型、链接库生成类型和结果文件生成类型。进一步地,在本发明的一个实施例中,所述依赖文件抓取模块进一步用于:所述中间文件生成是通过替换原本语句中的特定参数,进行抓取方法,导出经过预处理后的所述源文件,直接用于代码静态分析工具的检查;所述链接库生成类型的抓取,首先创建一个链接库的独立的文件夹,并将其所依赖的源文件的预处理结果依次保存在所述独立的文件夹中;所述结果文件生成类型的指令抓取,首先创建一个链接库的独立的文件夹,对所述结果文件所依赖的源代码,将其预处理结果依次保存在所述独立的文件夹中,对所述结果文件所依赖的链接库文件,为所述链接库文件前抓取的结果文件夹创建软链接并保存。进一步地,在本发明的一个实施例中,所述抓取对象为可执行编译指令的程序项目。为达到上述目的,本发明另一方面提出了基于指令伪装的程序编译抓取方法,包括以下步骤:获取抓取对象的当前使用指令,以将伪装指令替代所述当前使用指令,并指示编译抓取方法执行所述伪装指令;根据所述伪装指令的关键信息识别指令执行类型,并得到所述当前使用指令的源头文件和目标文件;根据所述指令执行类型获取执行所述伪装指令过程中所有中间文件、链接库、依赖文件和/或编译结果文件,获取并存储抓取的结果文件。本发明实施例的基于指令伪装的程序编译抓取方法,通过对程序的实际编译中使用的配置进行处理,可以直接提供给静态分析技术或其他处理进行程序的规范性、安全性和可靠性的检验等,且编译抓取的过程中不需要人工的参与;通过指令伪装的方式使得编译指令的兼容性更好,支持并行编译,同时也避免编译过程中文件删除导致的编译抓取时文件丢失等情况,且更加具备安全性和正确性;另外,没有额外第三方的资源依赖,抓取本身不受平台的限制,可以在不同的平台上解决目标问题。另外,根据本发明上述实施例的基于指令伪装的程序编译抓取方法还可以具有以下附加的技术特征:进一步地,在本发明的一个实施例中,所述将伪装指令替代所述当前使用指令,进一步包括:修改执行时系统环境中指令路径映射关系,以替换所述当前使用指令,其中,在调用所述伪装指令时,首先执行当前指令,以在执行完所述当前指令后,指示编译抓取。进一步地,在本发明的一个实施例中,所述指令执行类型包括中间文件生成类型、链接库生成类型和结果文件生成类型。进一步地,在本发明的一个实施例中,所述根据所述指令执行类型获取执行所述伪装指令过程中所有中间文件、链接库、依赖文件和/或编译结果文件,进一步包括:所述中间文件生成是通过替换原本语句中的特定参数,进行抓取方法,导出经过预处理后的所述源文件,直接用于代码静态分析工具的检查;所述链接库生成类型的抓取,首先创建一个链接库的独立的文件夹,并将其所依赖的源文件的预处理结果依次保存在所述独立的文件夹中;所述结果文件生成类型的指令抓取,首先创建一个链接库的独立的文件夹,对所述结果文件所依赖的源代码,将其预处理结果依次保存在所述独立的文件夹中,对所述结果文件所依赖的链接库文件,为所述链接库文件前抓取的结果文件夹创建软链接并保存。进一步地,在本发明的一个实施例中,所述抓取对象为可执行编译指令的程序项目。本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。附图说明本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:图1为根据本发明一个实施例的基于指令伪装的程序编译抓取系统结构示意图;图2为根据本发明一个具体实施例的基于指令伪装的程序编译抓取系统框架图;图3为根据本发明一个实施例的公共特征体的设计与伪装指令的继承框架图;图4为根据本发明一个实施例的指令参数处理模块流程框图;图5为根据本发明一个实施例的基于指令伪装的程序编译抓取方法流程图。具体实施方式下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。下面参照附图描述根据本发明实施例提出的基于指令伪装的程序编译抓取系统及方法,首先将参照附图描述根据本发明实施例提出的基于指令伪装的程序编译抓取系统。图1是本发明一个实施例的基于指令伪装的程序编译抓取系统结构示意图。如图1所示,该基于指令伪装的程序编译抓取系统10包括:指令伪装模块100、指令参数处理模块200和依赖文件抓取模块300。其中,指令伪装模块100用于获取抓取对象的当前使用指令,以将伪装指令替代当前使用指令,并指示编译抓取方法执行伪装指令。指令参数处理模块200用于根据伪装指令的关键信息识别指令执行类型,并得到当前使用指令的源头文件和目标文件。依赖文件抓取模块300用于根据指令执行类型获取执行伪装指令过程中所有中间文件、链接库、依赖文件和/或编译结果文件,获取并存储抓取的结果文件。本发明实施例的系统10可以在不需要人工的参与下,直接提供给静态分析技术或其他处理进行程序的相关检验,避免了编译过程中文件删除导致的编译抓取时文件丢失等情况,并且支持多平台编译,使得没有额外第三方的资源依赖。进一步地,在本发明的一个实施例中,抓取对象可以为可执行编译指令的程序项目。具体而言,抓取对象是可以执行编译指令的程序项目,包括但不限于使用编译规则指令脚本进行编译操作的程序项目。进一步地,在本发明的一个实施例中,指令伪装模块是修改执行时系统环境中指令路径映射关系,以替换当前使用指令,其中,在调用伪装指令时,首先执行当前指令,以在执行完当前指令后,指示编译抓取。也就是说,如图2所示,对编译所使用的指令进行伪装,以修改系统环境中指令路径映射关系的方式替换实际使用的指令,在伪装指令的使用中,除了完成指令原本的执以外,指示编译抓取方法的执行。通过分析指令语句中的关键信息,获知指令类型(中间文件生成、链接库生成、结果文件生成),提取指令使用的源文件和生成的目标文件。将处理编译过程中涉及的全部的中间文件生成、链接库生成及依赖文件收集、编译结果文件生成,并对编译抓取的结果文件进行规范的保存。进一步地,在本发明的一个实施例中,指令执行类型包括中间文件生成类型、链接库生成类型和结果文件生成类型。可选地,在本发明的一个实施例中,依赖文件抓取模块进一步用于:中间文件生成是通过替换原本语句中的特定参数,进行抓取方法,导出经过预处理后的源文件,直接用于代码静态分析工具的检查。链接库生成类型的抓取,首先创建一个链接库的独立的文件夹,并将其所依赖的源文件的预处理结果依次保存在独立的文件夹中。结果文件生成类型的指令抓取,首先创建一个链接库的独立的文件夹,对结果文件所依赖的源代码,将其预处理结果依次保存在独立的文件夹中,对结果文件所依赖的链接库文件,为链接库文件前抓取的结果文件夹创建软链接并保存。为使本发明实施例更加清晰,下面对本发明实施例做进一步的详细描述。(1)指令伪装模块,首先设计了一个具备公共特征的个体(公共特征体)。如图3所示,在公共特征体中记录了一条指令的执行类型,即中间文件生成、链接库生成或结果文件生成。有专门的方式保存指令所使用的源文件、指令生成的目标文件、指令生成的目标文件路径、原指令的名称、原指令的实际路径、执行指令的当前路径、指令参数、当前环境变量、日志文件路径、编译抓取输出文件路径,以及执行编译抓取的项目根目录路径。除此之外,公共特征体具备以下功能:对原本指令进行执行操作,操作日志记录,分析参数获知指令的执行类型,分析参数并记录所使用的源文件和目标文件,以及针对三种指令类型分别对应的编译结果文件抓取的执行策略。公共特征体是一个标准的伪装指令,所以除了公共特征体以外,其他伪装指令只需要继承公共特征体的特性,并对个性化的部分改造即可。例如某指令需要在“分析参数获知指令的执行类型”这一项上重写,对一些指令参数分别进行处理。在完成指令的伪装后,通过修改系统环境中指令路径映射关系的方式替换实际使用的指令,在编译抓取的时候,用伪装的指令替代系统中原有的指令并执行。(2)指令参数处理模块,通过分析指令语句中的关键信息,获知指令类型,如图4所示,举例如下:对于某指令,参数a对应会生成链接库文件,这种情况就对应“链接库生成”类型;参数b和参数c均是将源文件编译成为中间文件结果,即对应“中间文件生成”类型;该指令若非以上情况,如果又不包含参数d(对源文件仅做预处理操作),则是用于生成可执行文件,这样是属于“结果文件生成”类型。在进行指令类型获知以外,指令参数处理模块同时也提取指令使用的源文件和生成的目标文件,例如对于“结果文件生成”类型指令“某指令源文件a参数a目标文件b”,即使用源文件a生成目标文件b。其他两种类型指令的情况与之相似。(3)依赖文件抓取模块,将处理编译过程中涉及的全部的中间文件生成、链接库生成及依赖文件收集、编译结果文件生成,对编译抓取的结果文件进行规范的保存。依赖文件的抓取,对于不同类型的指令有不同的处理策略。“中间文件生成”通过替换原本语句中的特定参数,进行抓取,导出经过预处理后的源文件,可以直接用于代码静态分析工具的检查。“链接库生成”类型指令的抓取,首先会创建一个该链接库的独立的文件夹,并将其所依赖的源文件的预处理结果依次保存在该文件夹中。对于“结果文件生成”类型指令的抓取,同样先创建一个该链接库的独立的文件夹,对于该结果文件所依赖的源代码,将其预处理结果依次保存在该文件夹中,对于该结果文件所依赖的链接库文件,为链接库文件之前抓取的结果文件夹创建软链接并保存。接下来结合具体实施例对本发明实施例提出的基于指令伪装的程序编译抓取系统进行详细描述。例如,当前仅对本发明在c语言软件程序上进行了工具实现,并对开源c语言项目gzip(版本号1.9,项目主页http://www.gzip.org/)进行了编译抓取。编译抓取的结果共有85个中间结果文件,2个链接库文件和1个目标文件。(1)其中85个中间结果文件如下表1(具体实施例中gzip编译抓取的中间文件信息)所示:表1(2)其中链接库文件lib/libgzip.a依赖72个中间文件,如表2(链接库文件lib/libgzip.a依赖的文件列表)所示:表2(3)其中链接库文件libver.a依赖1个中间文件,如表3(链接库文件libver.a依赖的文件列表)所示:表3序号文件名85versionoi(4)其中结果文件gzip依赖个12个中间文件和2个链接库文件,如表4(结果文件gzip依赖的文件列表)所示:表4综上所述,本发明实施例的基于指令伪装的程序编译抓取系统相比于目前其他相关技术,具有以下几个优点:(1)编译抓取流程自动化只需提供一个可以编译的程序项目,即可获取该项目中可执行程序依赖的所有程序,而且程序根据实际编译中使用的配置进行处理。这些经过处理的程序,可以直接提供给静态分析技术或其他处理进行程序的规范性、安全性和可靠性的检验等。编译抓取的过程中不需要人工的参与。(2)同步执行方法的透明化基于指令伪装的系统,其所有的编译抓取均在伪装后的指令中同步执行,而非在整个项目的编译指令结束后才调起。这种同步执行方法的透明化,体现在整个过程对原本的编译不产生影响,使得编译指令的兼容性更好,支持并行编译,同时也避免编译过程中文件删除导致的编译抓取时文件丢失等情况。透明化的特性,使得编译抓取系统具备安全性和正确性。(3)兼容不同平台的通用化基于指令伪装的程序编译抓取系统,没有额外第三方的资源依赖,其本身不受平台的限制,可以在不同的平台上解决目标问题。根据本发明实施例提出的基于指令伪装的程序编译抓取系统,通过对程序的实际编译中使用的配置进行处理,可以直接提供给静态分析技术或其他处理进行程序的规范性、安全性和可靠性的检验等,且编译抓取的过程中不需要人工的参与;通过指令伪装的方式使得编译指令的兼容性更好,支持并行编译,同时也避免编译过程中文件删除导致的编译抓取时文件丢失等情况,且更加具备安全性和正确性;另外,没有额外第三方的资源依赖,抓取本身不受平台的限制,可以在不同的平台上解决目标问题。其次参照附图描述根据本发明实施例提出的基于指令伪装的程序编译抓取方法。图5是本发明一个实施例的基于指令伪装的程序编译抓取方法流程图。如图5所示,该基于指令伪装的程序编译抓取方法包括以下步骤:在步骤s101中,获取抓取对象的当前使用指令,以将伪装指令替代当前使用指令,并指示编译抓取方法执行伪装指令。进一步地,在本发明的一个实施例中,抓取对象为可执行编译指令的程序项目。进一步地,在本发明的一个实施例中,将伪装指令替代当前使用指令,进一步包括:修改执行时系统环境中指令路径映射关系,以替换当前使用指令,其中,在调用伪装指令时,首先执行当前指令,以在执行完当前指令后,指示编译抓取。在步骤s102中,根据伪装指令的关键信息识别指令执行类型,并得到当前使用指令的源头文件和目标文件。进一步地,在本发明的一个实施例中,指令执行类型包括中间文件生成类型、链接库生成类型和结果文件生成类型。在步骤s103中,根据指令执行类型获取执行伪装指令过程中所有中间文件、链接库、依赖文件和/或编译结果文件,获取并存储抓取的结果文件。进一步地,在本发明的一个实施例中,根据指令执行类型获取执行伪装指令过程中所有中间文件、链接库、依赖文件和/或编译结果文件,进一步包括:中间文件生成是通过替换原本语句中的特定参数,进行抓取方法,导出经过预处理后的源文件,直接用于代码静态分析工具的检查;链接库生成类型的抓取,首先创建一个链接库的独立的文件夹,并将其所依赖的源文件的预处理结果依次保存在独立的文件夹中;结果文件生成类型的指令抓取,首先创建一个链接库的独立的文件夹,对结果文件所依赖的源代码,将其预处理结果依次保存在独立的文件夹中,对结果文件所依赖的链接库文件,为链接库文件前抓取的结果文件夹创建软链接并保存。需要说明的是,本发明实施例的编译抓取方法的适用对象是可以执行编译指令的程序项目,包括但不限于使用编译规则指令脚本进行编译操作的程序项目。通过对编译所使用的指令进行伪装,通过修改系统环境中指令路径映射关系的方式替换实际使用的指令,在伪装指令的使用中,除了完成指令原本的执行以外,将处理并保存编译过程中涉及的全部的中间文件生成、链接库生成及依赖文件收集、编译结果文件生成及依赖文件收集,编译抓取的结果可以用于代码静态分析技术或其他处理。总之,根据上述的内容本发明提出的基于指令伪装的程序编译抓取方法的主要步骤为:(1)通过伪装指令,替代过程中实际使用的指令,除了完成指令原本的执行以外,指示编译抓取方法的执行;其中,指令伪装通过修改执行时系统环境中指令路径映射关系的方式替换实际使用的指令,在伪装指令的调用时首先完成指令原本的执行,完成后再指示编译抓取方法的执行。(2)在伪装指令内的编译抓取方法中,通过分析指令语句中的关键信息,获知指令类型(中间文件生成、链接库生成、结果文件生成),提取指令使用的源文件和生成的目标文件;其中,指令分析方法处理指令语句中的关键信息,获知指令分类,以及指令所使用的源文件和生成的目标文件,依据这些信息进行结果的导出和保存,且不同类型的指令对应不同的处理策略和方法。(3)提取指令的相关信息后,将生成文件和依赖文件以规范的方式保存,最终编译抓取的结果可以用于代码静态分析技术或其他处理。需要说明的是,前述对基于指令伪装的程序编译抓取系统实施例的解释说明也适用于该方法,此处不再赘述。根据本发明实施例提出的基于指令伪装的程序编译抓取方法,通过对程序的实际编译中使用的配置进行处理,可以直接提供给静态分析技术或其他处理进行程序的规范性、安全性和可靠性的检验等,且编译抓取的过程中不需要人工的参与;通过指令伪装的方式使得编译指令的兼容性更好,支持并行编译,同时也避免编译过程中文件删除导致的编译抓取时文件丢失等情况,且更加具备安全性和正确性;另外,没有额外第三方的资源依赖,其本身不受平台的限制,可以在不同的平台上解决目标问题。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。在本发明中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”、“固定”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系,除非另有明确的限定。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。在本发明中,除非另有明确的规定和限定,第一特征在第二特征“上”或“下”可以是第一和第二特征直接接触,或第一和第二特征通过中间媒介间接接触。而且,第一特征在第二特征“之上”、“上方”和“上面”可是第一特征在第二特征正上方或斜上方,或仅仅表示第一特征水平高度高于第二特征。第一特征在第二特征“之下”、“下方”和“下面”可以是第一特征在第二特征正下方或斜下方,或仅仅表示第一特征水平高度小于第二特征。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1