CN113656042B - 一种代码生成方法、装置、电子设备及存储介质 - Google Patents
一种代码生成方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN113656042B CN113656042B CN202110973058.4A CN202110973058A CN113656042B CN 113656042 B CN113656042 B CN 113656042B CN 202110973058 A CN202110973058 A CN 202110973058A CN 113656042 B CN113656042 B CN 113656042B
- Authority
- CN
- China
- Prior art keywords
- code
- original
- codes
- optimization
- original application
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/37—Compiler construction; Parser generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例提供了一种代码生成方法、装置、电子设备及存储介质,涉及信息安全技术领域,该方法应用于编译器,方法包括:获取应用程序的原始应用代码,以及获取用于对原始应用代码进行校验的原始校验代码;对原始应用代码进行预编译,得到第一原始代码,并对第一原始代码进行编译,得到第一中间代码;对原始校验代码进行预编译,得到第二原始代码,并对第二原始代码进行编译,得到第二中间代码;基于第一中间代码和第二中间代码,得到目标汇编代码;其中,目标汇编代码用于生成多段机器代码;多段机器代码用于生成对应的可执行文件。如此,能够避免原始应用代码丢失。
Description
技术领域
本发明涉及信息安全技术领域,特别是涉及一种代码生成方法、装置、电子设备及存储介质。
背景技术
在应用程序的运行过程中,需要对应用程序中的代码,比如,用于验证用户信息的代码、用于验证证书信息的代码等进行校验,以确定上述代码是否被恶意篡改。
相关技术中,可以在应用程序的原始代码(可以称为原始应用代码)中插入原始校验代码,得到目标原始代码。然后,可以基于目标原始代码生成对应的可执行文件。
然而,相关技术中,在原始应用代码中插入原始校验代码,即,需要对原始应用代码进行修改,因此,可能导致原始应用代码丢失。
发明内容
本发明实施例的目的在于提供一种代码生成方法、装置、电子设备及存储介质,在一定程度上避免原始应用代码丢失。具体技术方案如下:
在本发明实施的第一方面,首先提供了一种代码生成方法,所述方法应用与编译器,所述方法包括:
获取应用程序的原始应用代码,以及获取用于对所述原始应用代码进行校验的原始校验代码;
对所述原始应用代码进行预编译,得到第一原始代码,并对所述第一原始代码进行编译,得到第一中间代码;
对所述原始校验代码进行预编译,得到第二原始代码,并对所述第二原始代码进行编译,得到第二中间代码;
基于所述第一中间代码和第二中间代码,得到目标汇编代码;其中,所述目标汇编代码用于生成多段机器代码,所述多段机器代码用于生成对应的可执行文件。
可选的,所述基于所述第一中间代码和第二中间代码,得到目标汇编代码,包括:
在所述第二中间代码中插入免优化标识,作为第二免优化中间代码;
将所述第二免优化中间代码插入所述第一中间代码,得到第三中间代码;
对所述第三中间代码中未包含有免优化标识的部分进行优化,得到目标汇编代码。
可选的,所述基于所述第一中间代码和第二中间代码,得到目标汇编代码,包括:
对所述第一中间代码进行优化,得到第一优化中间代码;
将所述第二中间代码插入所述第一优化中间代码,得到目标汇编代码。
可选的,所述编译器包含用于获取待优化代码的第一接口,以及用于获取免优化代码的第二接口;
所述获取应用程序的原始应用代码,以及获取用于对所述原始应用代码进行校验的原始校验代码,包括:
通过所述第一接口获取所述应用程序的原始应用代码,以及通过所述第二接口获取用于对所述原始应用代码进行校验的原始校验代码。
可选的,所述原始校验代码包括:所述原始应用代码包含的各个子原始应用代码各自对应的校验代码;各个子原始应用代码中至少存在两个具有重叠部分的子原始应用代码。
在本发明实施的第二方面,还提供了一种代码生成装置,所述装置应用于编译器,所述装置包括:
原始代码获取模块,用于获取应用程序的原始应用代码,以及获取用于对所述原始应用代码进行校验的原始校验代码;
第一中间代码生成模块,用于对所述原始应用代码进行预编译,得到第一原始代码,并对所述第一原始代码进行编译,得到第一中间代码;
第二中间代码生成模块,用于对所述原始校验代码进行预编译,得到第二原始代码,并对所述第二原始代码进行编译,得到第二中间代码;
目标汇编代码生成模块,用于基于所述第一中间代码和第二中间代码,得到目标汇编代码;其中,所述目标汇编代码用于生成多段机器代码,所述多段机器代码用于生成对应的可执行文件。
可选的,所述目标汇编代码生成模块,包括:
第二免优化中间代码生成子模块,用于在所述第二中间代码中插入免优化标识,作为第二免优化中间代码;
第三中间代码生成子模块,用于将所述第二免优化中间代码插入所述第一中间代码,得到第三中间代码;
第一目标汇编代码生成子模块,用于对所述第三中间代码中未包含有免优化标识的部分进行优化,得到目标汇编代码。
可选的,所述目标汇编代码生成模块,包括:
第一优化中间代码生成子模块,用于对所述第一中间代码进行优化,得到第一优化中间代码;
第二目标汇编代码生成子模块,用于将所述第二中间代码插入所述第一优化中间代码,得到目标汇编代码。
可选的,所述编译器包含用于获取待优化代码的第一接口,以及用于获取免优化代码的第二接口;
原始代码获取模块,具体用于通过所述第一接口获取所述应用程序的原始应用代码,以及通过所述第二接口获取用于对所述原始应用代码进行校验的原始校验代码。
可选的,所述原始校验代码包括:所述原始应用代码包含的各个子原始应用代码各自对应的校验代码;各个子原始应用代码中至少存在两个具有重叠部分的子原始应用代码。
在本发明实施的又一方面,还提供了一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现上述任一所述的代码生成方法。
在本发明实施的又一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一所述的代码生成方法。
在本发明实施的又一方面,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的代码生成方法。
采用本发明实施例提供的方法,获取应用程序的原始应用代码,以及获取用于对原始应用代码进行校验的原始校验代码;对原始应用代码进行预编译,得到第一原始代码,并对第一原始代码进行编译,得到第一中间代码;对原始校验代码进行预编译,得到第二原始代码,并对第二原始代码进行编译,得到第二中间代码;基于第一中间代码和第二中间代码,得到目标汇编代码;其中,目标汇编代码用于生成多段机器代码;多段机器代码用于生成对应的可执行文件。
本发明实施例提供的方法,可以基于原始应用代码对应的中间代码,以及原始校验代码对应的中间代码,生成对应的目标汇编代码,进而,基于该目标汇编代码生成对应的可执行文件,并不需要在原始应用代码中直接插入原始校验代码,也就能够避免对原始校验代码进行改动,相应的,能够避免原始应用代码丢失。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为本发明实施例中提供的一种代码生成方法的流程图;
图2为本发明实施例中提供的一种可执行文件生成的原理示意图;
图3为本发明实施例中提供的另一种代码生成方法的流程图;
图4为相关技术中可执行文件生成的原理示意图;
图5为本发明实施例中提供的另一种代码生成方法的流程图;
图6为本发明实施例中提供的另一种代码生成方法的流程图;
图7为本发明实施例中提供的一种校验方法原理的流程图;
图8为本发明实施例中提供的一种可执行文件示意图;
图9为本发明实施例中提供的另一种可执行文件示意图;
图10为本发明实施例中提供的一种对校验值进行校验的示意图;
图11为本发明实施例中提供的一种代码生成装置的结构图;
图12为本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在应用程序的运行过程中,需要对应用程序中的代码,比如,用于验证用户信息的代码、用于验证证书信息的代码等进行校验,以确定上述代码是否被恶意篡改。相关技术中,可以在应用程序的原始代码(可以称为原始应用代码)中插入原始校验代码,得到目标原始代码。然后,可以基于目标原始代码生成对应的可执行文件。然而,相关技术中,在原始应用代码中插入原始校验代码,即,需要对原始应用代码进行修改,因此,可能会导致原始应用代码丢失。
本发明实施例提供了一种代码生成方法。该方法可以应用于编译器,该编译器可以基于原始应用代码和原始校验代码,生成目标汇编代码,进而,基于该目标汇编代码生成对应的可执行文件。当运行该可执行文件时,可以运行可执行文件中原始校验代码对应的部分,对可执行文件中原始应用代码对应的部分进行校验。
参见图1,图1为本发明实施例提供的一种代码生成方法的流程图,该方法可以包括以下步骤:
S101:获取应用程序的原始应用代码,以及获取用于对原始应用代码进行校验的原始校验代码。
S102:对原始应用代码进行预编译,得到第一原始代码,并对第一原始代码进行编译,得到第一中间代码。
S103:对原始校验代码进行预编译,得到第二原始代码,并对第二原始代码进行编译,得到第二中间代码。
S104:基于第一中间代码和第二中间代码,得到目标汇编代码。
其中,目标汇编代码用于生成多段机器代码,多段机器代码用于生成对应的可执行文件。
本发明实施例提供的方法,编译器可以基于原始应用代码对应的中间代码,以及原始校验代码对应的中间代码,生成目标汇编代码,进而,基于该目标汇编代码生成对应的可执行文件,并不需要在原始应用代码中直接插入原始校验代码,也就能够避免对原始校验代码进行改动,相应的,能够避免原始应用代码丢失。
针对步骤S101,一种实现方式中,本发明实施例中的应用程序可以为手机中的APP、也可以为电脑中的软件,但不限于此。原始应用代码和原始校验代码可以是使用高级编程语言编写的代码,使用的高级编程语言可以是C语言、Java、Python,但不限于此。
编译器对原始应用代码进行预编译和编译得到第一中间代码,对原始校验代码进行预编译和编译得到第二中间代码。
针对步骤S102、S103,一种实现方式中,编译器可以对原始应用代码和原始校验代码进行预编译,即,对原始应用代码和原始校验代码(可以统称为原始代码)中的伪指令(例如,原始代码以#开头的指令和特殊符号)进行处理。
步骤S102、S103可以同时执行。
伪指令可以包括:宏定义指令、条件编译指令、头文件包含指令、特殊符号。在预编译时,编译器可以根据宏定义指令,将代码中宏名替换为对应的数值(例如,宏定义指令为“#define M 5”,宏名为M,编译器进行预编译时,可以将代码中的所以M替换成5)。在预编译时,编译器可以根据条件编译指令,删除代码中不需要进行编译的代码段。在预编译时,编译器可以将头文件包含指令所指向的文件替换该头文件包含指令(例如,头文件包含指令为“#include<stdio.h>”,编译器进行预编译时,将stdio.h替换该头文件包含指令)。在预编译时可以将特殊符号替换为对应的数值(例如,特殊符号为“FILE”表示当前预编译程序的名称,编译器进行预编译时,可以生成唯一的数值替换该特殊符号,使用生成的唯一的数值表示该程序的名称)。在预编译时,编译器还可以删除代码中所有的注释。
编译器可以对第一原始代码进行词法分析和语法分析,确认第一原始代码是否符合词法规则和语法规则。在确认第一原始代码中的所有代码都符合词法规则和语法规则后,编译器将第一原始代码转换为对应的中间代码(即第一中间代码)。编译器可以对第二原始代码进行相同的操作,将第二原始代码转换为第二中间代码。
针对步骤S104,汇编器对目标汇编代码进行汇编,得到多段机器代码,链接器将多段机器代码进行链接,得到对应的可执行文件。
一种实现方式中,链接器可以将多段机器代码进行链接,即将一段机器代码中引用的符号同该符号在另一段机器代码中的定义链接起来,使上述多段机器代码成为一个能被计算机执行的统一整体。
目标汇编代码基于第一中间代码和第二中间代码生成。因此,对应的可执行文件,也包含第一中间代码和第二中间代码对应的部分。当执行到可执行文件中第二中间代码对应的部分(即原始校验代码对应的部分),通过该部分,可以对可执行文件中第一中间代码对应的部分(即原始应用代码对应的部分)进行校验。
本发明实施例提供的方法,编译器可以基于原始应用代码对应的中间代码,以及原始校验代码对应的中间代码,生成目标汇编代码,进而,基于该目标汇编代码生成对应的可执行文件,并不需要在原始应用代码中直接插入原始校验代码,也就能够避免对原始校验代码进行改动,相应的,能够避免原始应用代码丢失。
参见图2,图2为本发明实施例提供的一种可执行文件生成的原理示意图。
生成可执行文件要使用编译器、汇编器和链接器,可执行文件生成包括以下步骤:
预编译:编译器分别对获取到的原始应用代码和原始校验代码进行预编译,得到第一原始代码和第二原始代码。
编译:编译器分别对第一原始代码进行编译得到第一中间代码,对第二原始代码进行编译得到第二中间代码,并在第二中间代码中添加免优化标识,得到第二免优化中间代码。
插入校验代码:校验代码为上述第二免优化中间代码,编译器将第二免优化中间代码插入第一中间代码得到第三中间代码。
优化:编译器对第三中间代码中未包含有免优化标识的部分进行优化,得到目标汇编代码。
汇编:汇编器将目标汇编代码进行汇编,生成多段目标机器代码。
链接:链接器将多段目标机器代码进行链接,生成目标可执行文件。
针对上述步骤S104,可以采取以下方式,基于第一中间代码和第二中间代码,得到目标汇编代码。
方式一:
在一个实施例中,参见图3,在图1的基础上,步骤S104包括:
S1041:在第二中间代码中插入免优化标识,作为第二免优化中间代码。
S1042:将第二免优化中间代码插入第一中间代码,得到第三中间代码。
S1043:对第三中间代码中未包含有免优化标识的部分进行优化,得到目标汇编代码。
一种实现方式中,编译器可以在第二中间代码中插入免优化标识。编译器可以为待编译的原始应用代码设置不同的优化等级。对待编译原始应用代码进行优化时,编译器可以根据不同的优化等级,启动不同数量的优化选项(每一个优化选项对应不同功能的优化步骤)。编译器可以通过控制变量-O,控制编译器的优化等级。-O设置有五种:-O0、-O1、-O2、-O3和-Os。-O0表示不启动任何优化选项,即优化等级设置为-O0时,编译器不对代码进行优化。-O1、-O2、-O3、-Os表示分别启动了不同数量的优化选项,即优化等级设置为-O1、-O2、-O3、-Os任意一个时,编译器对代码进行不同步骤的优化。其中-O2为实际工作中编译器的默认优化等级。免优化标识可以为-O0。
一种实现方式中,编译器可以使用attribute((optimize(“O0”)))为第二中间代码添加免编译标识,即将第二中间代码的优化等级设置为-O0。编译器可以使用attribute((optimize(“O0”)))设置第二中间代码的优化级别为-O0。例如,编译器的默认优化等级为-O2,第二中间代码为jy(),代码如下:“int jy()_attribute_((optimize("O0")));”。通过上述代码,编译器可以将jy()的优化级别设置为-O0,而jy()以外的代码优化等级为默认优化等级,即编译器不对jy()进行优化,对jy()以外的代码按照优化等级-O2进行优化。
另一种实现方式中,编译器可以使用#pragma GCC optimize(“O0”)将第二中间代码优化级别设置为-O0,在第二中间代码第一行代码的前一行,使用#pragma GCC optimize(“O0”)将第二中间代码优化级别设置为-O0,并在第二中间代码最后一行代码之后一行,使用#pragma GCC pop_options将代码优化级别恢复为默认优化级别。例如,编译器的默认优化等级为-O2,jy()代表第二中间代码,代码如下:
“#pragma GCC push_options
#pragma GCC optimize("O0")
jy()
#pragma GCC pop_options”
编译器可以将默认优化级别-O2存入堆栈,然后,将当前优化级别设置为-O0,即第二中间代码的优化级别为-O0,编译器不对第二中间代码进行优化,最后,将当前优先级设置为-O2。通过上述代码,编译器可以使第二中间代码免于被优化,而将第二中间代码以外的其他中间代码,根据默认优化级别进行优化。
编译器通过将第二免优化中间代码插入第一中间代码中,得到第三中间代码。实现了在原始应用代码对应的中间代码中,插入用于对原始应用代码进行校验的原始校验代码对应的中间代码,因此,可以不需要在原始应用代码中插入原始校验代码,避免对原始校验代码进行改动,相应的,能够避免原始应用代码丢失。
相关技术中,在对中间代码进行优化时,编译器会将中间代码中对应用程序最终的运算结果不起任何作用的部分,判定为无用代码并进行删除。而第二中间代码部分,并不会对第一中间代码部分的运算结果有作用,若基于相关技术对第三中间代码进行优化,则编译器会判定第三中间代码中第二中间代码对应的部分为无用代码,并删除该部分代码。导致生成的可执行文件中没有第二中间代码对应的部分,则运行可执行文件时无法对可执行文件进行校验。
例如,参见图4,图4为相关技术中的可执行文件生成的流程示意图。
相关技术中,在生成可执行文件之前,需要在原始应用代码中插入原始校验代码,得到目标原始代码。编译器可以将获取到的目标原始代码进行预编译、编译优化,生成目标汇编代码,然后,汇编器将目标汇编代码进行汇编,生成多段目标机器代码,最后,链接器将多段目标机器代码进行链接,生成目标可执行文件。而在本发明的一种实现方式中,对汇编代码进行优化时,可以识别免优化标识,在优化的过程中,只对第三中间代码中未包含有免优化标识的部分进行优化。也就是说,当对第三中间代码进行优化时,只对第三中间代码中第一中间代码对应的部分进行优化,而不对第三中间代码中第二免优化中间代码对应的部分进行优化,避免了在优化过程中会删除第二中间代码对应部分的问题。
方式二:参见图5,在图1的基础上,步骤S104包括:
S1044:对第一中间代码进行优化,得到第一优化中间代码。
S1045:将第二中间代码插入第一优化中间代码,得到目标汇编代码。
一种实现方式中,可以只对第一中间代码进行优化,不对第二中间代码进行优化。然后将第二中间代码插入优化后的第一中间代码中,得到目标汇编代码。
在一个实施例中,原始校验代码包括:原始应用代码包含的各个子原始应用代码各自对应的校验代码;各个子原始应用代码中至少存在两个具有重叠部分的子原始应用代码。
一种实现方式中,子原始应用代码表示原始应用代码中的一段代码,例如,子原始应用代码可以是原始应用代码中的一行或多行代码,或者,可以是整个原始应用代码。也就是说,原始应用代码可以包括多个子原始应用代码。
一种实现方式中,针对任一一个子原始应用代码,该子原始应用代码至少与其他一个子原始应用代码存在重叠部分。例如,假设原始应用代码包含50行代码,子原始应用代码1包含第1-15行代码,子原始应用代码2包含10-35行代码,子原始应用代码3包含第36-50行代码,子原始应用代码4包含第36-40行代码,子原始应用代码5包含第10-12行和38-45行代码。子原始应用代码1与子原始应用代码2具有重叠部分,子原始应用代码3与子原始应用代码4具有重叠部分,子原始应用代码5与子原始应用代码1、2、3、4分别具有重叠部分。具体的,可以基于应用程序中重要的代码行,比如,用于验证用户信息的代码、用于验证证书信息的代码等,确定各子原始应用代码包含的代码行。例如,确定出的多个子原始应用代码之间的重叠部分为应用程序中重要的代码行。以此可以提高应用程序中重要的代码行的校验次数,保证及时发现上述重要的代码行是否被恶意篡改。
另一种实现方式中,各个子原始应用代码之间的重叠部分的并集为原始应用代码,即,原始应用代码至少会被校验两次。例如,假设原始应用代码包含5行代码,子原始应用代码1包含第1-2行码,子原始应用代码2包含第2行和第4行代码,子原始应用代码3包含第3行和第5行代码,子原始应用代码4包含第1行代码,子原始应用代码5包含2-5行代码。子原始应用代码1与子原始应用代码2重叠部分为第2行代码,子原始应用代码4与子原始应用代码1重叠部分为第1行代码,子原始应用代码5与子原始应用代码2重叠部分为第2行和第4行代码,子原始应用代码5与子原始应用代码3重叠部分为第3行和第5行代码。各子原始应用代码的重叠部分求并集为第一行代码、第二行代码、第三行代码、第四行代码和第五行代码,重叠部分包含了原始应用代码所有代码行,即,各子原始代码的重叠部分求并集为该原始应用代码。保证了原始校验代码可以对目标应用代码中的所有代码行,进行至少两次校验。
两个子原始应用代码之间具有重叠部分,则可以使用该两个子原始应用代码各自对应的原始校验代码对重叠部分进行多次校验,使得原始校验代码的校验区域呈网状结构,可以使恶意篡改更容易被校验出来。
在一个实施例中,编译器包含用于获取待优化代码的第一接口,以及用于获取免优化代码的第二接口。即,通过第一接口获取的代码,在编译过程中,需要进行优化,而通过第二接口获取的代码,在编译过程中,不需要进行优化。
步骤S101包括:通过第一接口获取应用程序的原始应用代码,以及通过第二接口获取用于对原始应用代码进行校验的原始校验代码。
一种实现方式中,编译器中可以设置有接口,通过接口可以获取原始应用代码和原始校验代码。例如,编译器中可以设置有多个接口(第一接口和第二接口)。由于,编译器是从第一接口获取的原始应用代码,因此,在编译过程中需要对原始应用代码进行优化。由于,编译器是通过第二接口获取的原始校验代码,因此,在编译过程中,不对原始校验代码进行优化。基于上述处理,针对需要优化和不需要优化的代码,分别从不同的接口获取,以实现对获取的代码进行区分,并可以控制在编译过程中对获取到的代码是否进行优化。避免了在优化过程中,会删除原始校验代码对应的第二中间代码对应部分的问题。
在一个实施例中,参见图6,在图1的基础上,步骤S104之后,该方法还可以包括:
S105:计算可执行文件中各个子原始应用代码对应部分的校验值。
S106:将校验值存储在多个存储位置。
其中,每一存储位置均存储有各个子原始应用代码对应部分的校验值。
原始校验代码包括:第一原始校验代码和第二原始校验代码;第一原始校验代码用于基于多个存储位置中存储的校验值,对子原始应用代码进行校验;第二原始校验代码用于对多个存储位置中存储的校验值进行校验。
一种实现方式中,可以使用散列函数计算可执行文件中各个子原始应用代码对应部分的校验值。其中,散列函数可以为MD5(MD5 Message-Digest Algorithm,信息摘要算法),或者,也可以为SHA(Secure Hash Algorithm,安全散列算法),但并不限于此。
一种实现方式中,可以将各个校验值保存在全局变量中,使得可执行文件中,所有的第一校验代码(即上述实施例中,可执行文件中第一原始校验代码对应的部分)和第二校验代码(即上述实施例中,可执行文件中第二原始校验代码对应的部分)在运行时,都可以在上述全局变量中获取该校验值(以下可以称为第一校验值)。示例性地,每一个校验值至少保存在两个全局变量中,即,针对每一校验值,可以通过全局变量保存多份该校验值。针对某一待校验代码,可以通过第一校验代码,从用于记录该待校验代码对应的第一校验值的多个全局变量中,选择一个全局变量。进而,获取该全局变量中记录的数值,然后,可以将该数值与第二校验代码进行比较,以进行带校验代码的校验。
另一种实现方式中,可以将各个校验值保存在多个文件中,每个文件均保存各个校验值。可以将其中一个文件作为校验文件,其他的文件作为备份文件。当运行第一校验代码时,可以调用该校验文件,并从该校验文件中获取该第一校验代码对应的校验值。当运行第二校验代码时,可以调用该备份文件,对校验文件中的各个校验值进行校验。即,针对校验文件中存储的某一待校验代码的第一校验值,可以通过第二校验代码,获取备份文件中存储的该待校验代码的第一校验值(可以成为备份第一校验值),将校验文件中存储的第一校验值,与该备份第一校验值进行比较,以对该第一校验代码对应的第一校验值进行校验。
通过第二校验代码,可以获取到上述多个存储位置中,某一待校验代码对应的多个第一校验值。也就是说,在上述多个存储位置中的任一存储位置中,都存储有该待校验代码对应的第一校验值。通过第二校验代码,可以判断多个存储位置中,存储的该待校验代码对应的多个第一校验值是否相同。如果不同,则可以确定当前该待校验代码对应的第一校验值异常。在一个实施例中,第二原始校验代码对应的中间代码插入在第一中间代码中的目标位置处,目标位置为原始应用代码中的目标函数对应的位置;目标函数为基于在原始应用代码的运行过程中的被调用次数,从原始应用代码包含的各函数中确定的。
一种实现方式中,在可执行文件运行的过程中,当调用目标函数时,则可以运行第二校验代码对校验值进行校验。
可以根据应用程序的运行过程中,需要通过第二校验代码进行校验的校验次数,确定第二原始校验代码插入的目标函数。
若需要通过第二校验代码进行校验的校验次数较多,即,需要频繁对校验值进行校验,则可以将被调用次数比较多的函数作为目标函数。例如,可以将被调用次数比较多的预设数目个函数作为目标函数,或者,也可以将被调用次数大于预设阈值的函数作为目标函数。
若需要通过第二校验代码进行校验的校验次数较少,即,不需要频繁对第一校验值进行校验,为了不过多增加程序运行时间,则可以将被调用次数比较少的函数作为目标函数。例如,可以将被调用次数比较少的预设数目个函数作为目标函数,或者,也可以将被调用次数小于预设阈值的函数作为目标函数。
参见图7,图7为本发明实施例提供的一种校验方法原理的流程图。
当运行到第一校验代码时,计算待校验代码(即上述实施例中,可执行文件中第一原始校验代码对应的子原始应用代码对应的部分)的目标校验值。可以使用HashCal(哈希值计算器)计算待校验代码的哈希值作为目标校验值。
调用对比校验值,其中对比校验值可以为上述第一校验值,对比校验值可以存储在预设的存储器中。例如,可以存储在HashStore(哈希值存储器)中,哈希值存储器可以采用(key,value)Method(键值对方法)存储哈希值,即存储校验值,通过第一校验代码中的key,可以在HashStore中调取key对应的value,即调取到第一校验值。
对比目标校验值与对比校验值,即将计算出的目标校验值与调取的第一校验值进行对比。若对比一致,则表明程序无异常。若对比不一致,则表明程序运行异常进入异常响应,其中,异常响应可以为停止程序运行,并进行异常报警。
参见图8,图8为本发明实施例提供的一种可执行文件示意图。
Stage1(第一段)表示第一阶段校验,即,对目标代码(即上述实施例中的可执行文件)进行校验。图8中左右两侧均表示应用程序的目标代码,Checker1-6表示各个第一校验代码。相邻的两个第一校验代码所保护(校验)的待校验代码部分存在重叠部分,所有Checker的保护区间形成了网状的保护区间,一些程序代码可以由两个Checker进行校验,使恶意篡改更容易被校验出来。
参见图9,图9为本发明实施例提供的另一种可执行文件示意图。
Stage1表示第一阶段校验,即,对目标代码进行校验。图9中表示应用程序的目标代码,Checker1-3表示各个第一校验代码。相邻的两个第一校验代码所保护的待校验代码部分存在重叠部分,相邻的三个第一校验代码所保护的待校验代码部分也存在重叠部分。各个Checker的保护范围都可以重叠,所有Checker的保护区间形成了网状的保护区间,一些程序代码可以由多个Checker进行校验,使恶意篡改更容易被校验出来。
参见图10,图10为本发明实施例提供的一种对校验值进行校验的示意图。
Stage2(第二段)表示第二阶段校验,即,对校验值进行校验。图12中右侧表示应用程序的目标代码,Stage1Checker1-Stage1Checke3可以为上述校验对应待校验代码的第一校验代码。Stage2Checker1-Stage2Checker3可以为校验校验值的第二校验代码。
图10中左侧表示存储校验值的存储器,HashStore for Stage1Checker1-HashStore for Stage1Checker3可以为目标代码中第一校验代码对应的待校验代码的校验值。HashStore for Stage1Checkers中可以存储有HashStore for Stage1Checker1-HashStore for Stage1Checker3,可以用于校验上述校验值。Stage2Checker1-Stage2Checker3的保护区间都包括全部的校验值,即,运行Stage2Checker1-Stage2Checker3中任意一个代码,都可以校验全部的校验值。
基于相同的发明构思,本发明实施例还提供了一种代码生成装置参见图11,图11为本发明实施例提供的一种代码生成装置的结构图,该装置应用于编译器,该装置包括:
原始代码获取模块1101,用于获取应用程序的原始应用代码,以及获取用于对原始应用代码进行校验的原始校验代码;
第一中间代码生成模块1102,用于对原始应用代码进行预编译,得到第一原始代码,并对第一原始代码进行编译,得到第一中间代码;
第二中间代码生成模块1103,用于对原始校验代码进行预编译,得到第二原始代码,并对第二原始代码进行编译,得到第二中间代码;
目标汇编代码生成模块1104,用于基于第一中间代码和第二中间代码,得到目标汇编代码;其中,目标汇编代码用于生成多段机器代码,多段机器代码用于生成对应的可执行文件。
一种实施方式中,目标汇编代码生成模块1104,包括:
第二免优化中间代码生成子模块,用于在第二中间代码中插入免优化标识,作为第二免优化中间代码;
第三中间代码生成子模块,用于将第二免优化中间代码插入第一中间代码,得到第三中间代码;
第一目标汇编代码生成子模块,用于对第三中间代码中未包含有免优化标识的部分进行优化,得到目标汇编代码。
一种实施方式中,目标汇编代码生成模块1104,包括:
第一优化中间代码生成子模块,用于对第一中间代码进行优化,得到第一优化中间代码;
第二目标汇编代码生成子模块,用于将第二中间代码插入第一优化中间代码,得到目标汇编代码。
一种实施方式中,编译器包含用于获取待优化代码的第一接口,以及用于获取免优化代码的第二接口;
原始代码获取模块1101,具体用于通过第一接口获取应用程序的原始应用代码,以及通过第二接口获取用于对原始应用代码进行校验的原始校验代码。
一种实施方式中,原始校验代码包括:原始应用代码包含的各个子原始应用代码各自对应的校验代码;各个子原始应用代码中至少存在两个具有重叠部分的子原始应用代码。
一种实施方式中,装置还包括:
校验值计算模块,用于计算可执行文件中各个子原始应用代码对应部分的校验值;
校验值存储模块,用于将校验值存储在多个存储位置,其中,每一存储位置均存储有各个子原始应用代码对应部分的校验值;
原始校验代码包括:第一原始校验代码和第二原始校验代码;第一原始校验代码用于基于多个存储位置中存储的校验值,对子原始应用代码进行校验;第二原始校验代码用于对多个存储位置中存储的校验值进行校验。
一种实施方式中,第二原始校验代码对应的中间代码插入在原始应用代码中目标函数对应的中间代码中;目标函数为基于在原始应用代码的运行过程中的被调用次数,从原始应用代码包含的各函数中确定的。
本发明实施例还提供了一种电子设备,如图12所示,包括处理器1201、通信接口1202、存储器1203和通信总线1204,其中,处理器1201,通信接口1202,存储器1203通过通信总线1204完成相互间的通信,
存储器1203,用于存放计算机程序;
处理器1201,用于执行存储器1203上所存放的程序时,实现如下步骤:
获取应用程序的原始应用代码,以及获取用于对所述原始应用代码进行校验的原始校验代码;
对所述原始应用代码进行预编译,得到第一原始代码,并对所述第一原始代码进行编译,得到第一中间代码;
对所述原始校验代码进行预编译,得到第二原始代码,并对所述第二原始代码进行编译,得到第二中间代码;
基于所述第一中间代码和第二中间代码,得到目标汇编代码;其中,所述目标汇编代码用于生成多段机器代码,所述多段机器代码用于生成对应的可执行文件。
上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processor,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述实施例中任一所述的代码生成方法。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的代码生成方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备、计算机可读存储介质以及计算机程序产品实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (8)
1.一种代码生成方法,其特征在于,所述方法应用于编译器,所述方法包括:
获取应用程序的原始应用代码,以及获取用于对所述原始应用代码进行校验的原始校验代码;
对所述原始应用代码进行预编译,得到第一原始代码,并对所述第一原始代码进行编译,得到第一中间代码;
对所述原始校验代码进行预编译,得到第二原始代码,并对所述第二原始代码进行编译,得到第二中间代码;
基于所述第一中间代码和第二中间代码,得到目标汇编代码;其中,所述目标汇编代码用于生成多段机器代码;所述多段机器代码用于生成对应的可执行文件;
所述基于所述第一中间代码和第二中间代码,得到目标汇编代码,包括:
在所述第二中间代码中插入免优化标识,作为第二免优化中间代码;
将所述第二免优化中间代码插入所述第一中间代码,得到第三中间代码;
对所述第三中间代码中未包含有免优化标识的部分进行优化,得到目标汇编代码;
其中,代码不同的优化等级对应不同数量的优化选项;每一优化选项对应不同功能的优化步骤;所述免优化标识表示不启动任何优化选项;代码的优化等级对应的优化选项,用于在启动时对该代码进行对应的功能的优化步骤的优化。
2.根据权利要求1所述的方法,其特征在于,所述基于所述第一中间代码和第二中间代码,得到目标汇编代码,包括:
对所述第一中间代码进行优化,得到第一优化中间代码;
将所述第二中间代码插入所述第一优化中间代码,得到目标汇编代码。
3.根据权利要求1或2所述的方法,其特征在于,所述编译器包含用于获取待优化代码的第一接口,以及用于获取免优化代码的第二接口;
所述获取应用程序的原始应用代码,以及获取用于对所述原始应用代码进行校验的原始校验代码,包括:
通过所述第一接口获取所述应用程序的原始应用代码,以及通过所述第二接口获取用于对所述原始应用代码进行校验的原始校验代码。
4.根据权利要求1所述的方法,其特征在于,所述原始校验代码包括:所述原始应用代码包含的各个子原始应用代码各自对应的校验代码;各个子原始应用代码中至少存在两个具有重叠部分的子原始应用代码。
5.一种代码生成装置,其特征在于,所述装置应用于编译器,所述装置包括:
原始代码获取模块,用于获取应用程序的原始应用代码,以及获取用于对所述原始应用代码进行校验的原始校验代码;
第一中间代码生成模块,用于对所述原始应用代码进行预编译,得到第一原始代码,并对所述第一原始代码进行编译,得到第一中间代码;
第二中间代码生成模块,用于对所述原始校验代码进行预编译,得到第二原始代码,并对所述第二原始代码进行编译,得到第二中间代码;
目标汇编代码生成模块,用于基于所述第一中间代码和第二中间代码,得到目标汇编代码;其中,所述目标汇编代码用于生成多段机器代码,所述多段机器代码用于生成对应的可执行文件;
所述目标汇编代码生成模块,包括:
第二免优化中间代码生成子模块,用于在所述第二中间代码中插入免优化标识,作为第二免优化中间代码;
第三中间代码生成子模块,用于将所述第二免优化中间代码插入所述第一中间代码,得到第三中间代码;
第一目标汇编代码生成子模块,用于对所述第三中间代码中未包含有免优化标识的部分进行优化,得到目标汇编代码;
其中,代码不同的优化等级对应不同数量的优化选项;每一优化选项对应不同功能的优化步骤;所述免优化标识表示不启动任何优化选项;代码的优化等级对应的优化选项,用于在启动时对该代码进行对应的功能的优化步骤的优化。
6.根据权利要求5所述的装置,其特征在于,所述中间代码获取模块,包括:
第一中间代码生成子模块,用于对所述原始应用代码进行预编译,得到第一原始代码,并对所述第一原始代码进行编译,得到第一中间代码;
第二中间代码生成子模块,用于对所述原始校验代码进行预编译,得到第二原始代码,并对所述第二原始代码进行编译,得到第二中间代码。
7.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-4任一所述的方法步骤。
8.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-4任一所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110973058.4A CN113656042B (zh) | 2021-08-24 | 2021-08-24 | 一种代码生成方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110973058.4A CN113656042B (zh) | 2021-08-24 | 2021-08-24 | 一种代码生成方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113656042A CN113656042A (zh) | 2021-11-16 |
CN113656042B true CN113656042B (zh) | 2023-07-21 |
Family
ID=78481757
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110973058.4A Active CN113656042B (zh) | 2021-08-24 | 2021-08-24 | 一种代码生成方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113656042B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116820419A (zh) * | 2022-03-22 | 2023-09-29 | 瑞昱半导体股份有限公司 | 源代码校验方法及非暂态计算机可读存储介质装置 |
CN114995799B (zh) * | 2022-07-18 | 2022-10-25 | 新华三半导体技术有限公司 | 一种汇编代码生成方法、装置及电子设备 |
CN116627429B (zh) * | 2023-07-20 | 2023-10-20 | 无锡沐创集成电路设计有限公司 | 一种汇编代码生成方法、装置及电子设备和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112527316A (zh) * | 2020-12-29 | 2021-03-19 | Oppo广东移动通信有限公司 | 代码编译方法、装置、电子设备及存储介质 |
CN112540767A (zh) * | 2020-12-25 | 2021-03-23 | 北京百度网讯科技有限公司 | 程序代码的生成方法、装置、电子设备及存储介质 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6883166B1 (en) * | 2000-11-21 | 2005-04-19 | Hewlett-Packard Development Company, L.P. | Method and apparatus for performing correctness checks opportunistically |
US7103880B1 (en) * | 2003-04-30 | 2006-09-05 | Hewlett-Packard Development Company, L.P. | Floating-point data speculation across a procedure call using an advanced load address table |
US20050125783A1 (en) * | 2003-12-09 | 2005-06-09 | Texas Instruments Incorporated | Program optimization with intermediate code |
CN101446905B (zh) * | 2008-12-29 | 2012-06-27 | 飞天诚信科技股份有限公司 | 编译方法 |
CN101533454B (zh) * | 2009-04-14 | 2011-12-28 | 飞天诚信科技股份有限公司 | 编译方法 |
US9477461B1 (en) * | 2014-03-12 | 2016-10-25 | Cloud Linux Zug GmbH | Systems and methods for generating and applying operating system live updates |
US9274771B1 (en) * | 2014-09-22 | 2016-03-01 | Oracle International Corporation | Automated adaptive compiler optimization |
CN106611125A (zh) * | 2016-12-12 | 2017-05-03 | 中国航空工业集团公司洛阳电光设备研究所 | 一种验证编译器安全性的方法 |
CN109032606B (zh) * | 2018-07-10 | 2022-03-01 | 北京小米移动软件有限公司 | 原生应用程序的编译处理方法、装置及终端 |
US11119798B2 (en) * | 2018-11-15 | 2021-09-14 | Sternum Ltd. | Applying control flow integrity verification in intermediate code files |
CN110245468B (zh) * | 2019-05-24 | 2023-06-16 | 创新先进技术有限公司 | 一种编译方法、装置、设备及系统 |
-
2021
- 2021-08-24 CN CN202110973058.4A patent/CN113656042B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112540767A (zh) * | 2020-12-25 | 2021-03-23 | 北京百度网讯科技有限公司 | 程序代码的生成方法、装置、电子设备及存储介质 |
CN112527316A (zh) * | 2020-12-29 | 2021-03-19 | Oppo广东移动通信有限公司 | 代码编译方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113656042A (zh) | 2021-11-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113656042B (zh) | 一种代码生成方法、装置、电子设备及存储介质 | |
US5559884A (en) | Method and system for generating and auditing a signature for a computer program | |
CN110414261B (zh) | 一种数据脱敏方法、装置、设备及可读存储介质 | |
CN107229848A (zh) | 一种代码加固方法和装置 | |
CN110941528B (zh) | 一种基于故障的日志埋点设置方法、装置及系统 | |
JP6780020B2 (ja) | データコンパイル方法、装置、電子端末及びコンピュータ読み取り可能な記憶媒体 | |
US8412953B2 (en) | System and method for annotation driven integrity verification | |
US20140053134A1 (en) | Software regression testing using symbolic execution | |
CN102341806A (zh) | 软件保护 | |
CN111158674A (zh) | 组件管理方法、系统、设备及存储介质 | |
CN112783800B (zh) | 一种测试用例筛选方法及装置 | |
US8661559B2 (en) | Software control flow watermarking | |
CN114047928B (zh) | 一种适用于组合交易的智能合约形式化验证方法及系统 | |
JP2006318464A (ja) | 実行可能コードのコピーについての固有の識別を生成する方法及びその管理 | |
CN108446538B (zh) | 基于状态、符号执行和单点逻辑的源代码加固方法及装置 | |
JP2006318465A (ja) | 実行可能コードのコピーについての固有の識別を生成する方法及びその管理 | |
JP2016128941A (ja) | 出力判定装置、出力判定方法、出力判定プログラム、及び、静的解析装置 | |
CN114186233A (zh) | 代码的反混淆方法、装置、电子设备及存储介质 | |
JP7468641B2 (ja) | ソフトウェア修正装置、ソフトウェア修正方法、及びプログラム | |
Yu et al. | Possibility of cost reduction by mutant clustering according to the clustering scope | |
CN113656043B (zh) | 一种代码校验方法、装置、电子设备及存储介质 | |
US20050055312A1 (en) | Software control flow watermarking | |
CN117633734A (zh) | 代码编译的方法、装置及电子设备 | |
JP5516277B2 (ja) | テストケース関係抽出方法、テストケース関係抽出装置及びテストケース関係抽出プログラム | |
CN114995799B (zh) | 一种汇编代码生成方法、装置及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |