CN111258590B - 一种代码执行方法、装置和用于代码执行的装置 - Google Patents
一种代码执行方法、装置和用于代码执行的装置 Download PDFInfo
- Publication number
- CN111258590B CN111258590B CN202010371144.3A CN202010371144A CN111258590B CN 111258590 B CN111258590 B CN 111258590B CN 202010371144 A CN202010371144 A CN 202010371144A CN 111258590 B CN111258590 B CN 111258590B
- Authority
- CN
- China
- Prior art keywords
- symbol
- target
- input
- parameter
- code
- 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
Images
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6245—Protecting personal data, e.g. for financial or medical purposes
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Medical Informatics (AREA)
- Databases & Information Systems (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请实施例提供一种代码执行方法、装置和用于代码执行的装置。其中的方法包括:对目标源码进行编译处理,得到目标文件,目标文件中包含第一编程语言代码以及用于描述所述隐私操作的伪汇编代码的文本文件;根据目标源码中的输入符号和输出符号,构建输入符号名称列表、输入符号数值列表、以及输出符号名称列表;执行目标文件,以及在执行到目标文件中的隐私操作时,生成第一参数;通过第一接口向虚拟执行器接口模块传递第一参数,虚拟执行器接口模块用于基于所述第一参数,生成第二参数,并通过第二接口向底层执行器传递所述第二参数,底层执行器用于基于第二参数,执行隐私操作。本申请实施例使得密文处理系统可以支持任意的编程语言。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种代码执行方法、装置和用于代码执行的装置。
背景技术
密文处理系统可以基于数据的密文实现数据的清洗、计算、分析、模型训练、存储、数据库查询等数据相关操作,在操作过程中不暴露数据的明文,可以保护数据的隐私安全。
通常,密文处理系统包括前端和后端,前端用于实现密文处理的系统框架,后端用于实现基于密文的隐私计算。由于密文数据的处理效率相对于明文数据的处理效率较低,因此,为提升隐私计算的效率,通常后端会固定采用如C/C++等一种相对执行效率较高的语言实现,那么目前的密文处理系统至少存在如下问题:
首先,在密文处理系统后端采用的编程语言固定的情况下,若前端采用与后端编程语言相配合的一种编程语言如Python语言,将使得该系统无法支持其他编程语言,为了支持其他编程语言(如R语言或Java语言等),不得不使用其他编程语言(如R语言或Java语言等)重新编写一套前端的系统框架,导致密文处理系统的扩展性较低,以及再次开发的成本较高。
其次,由于密文处理系统的前端是通过Python语言实现,而后端的隐私计算却是由C++语言提供的计算引擎,以动态库的方式实现。这样的设计,导致了在进行隐私计算时,Python代码和C++代码中的变量,在内存里进行大量无效的传递及返回操作,导致代码执行效率较低。
发明内容
本申请实施例提供一种代码执行方法、装置和用于代码执行的装置,可以为实现跨语言跨平台的隐私计算,提供执行环境,使得密文处理系统可以支持任意的编程语言,增强了系统的可扩展性,并且可以提高代码的执行效率。
为了解决上述问题,本申请实施例公开了一种代码执行方法,所述方法用于执行第一编程语言实现的目标源码,所述目标源码中包含以动态库形式存在的第二编程语言实现的隐私操作,所述方法包括:
对所述目标源码进行编译处理,得到目标文件,所述目标文件中包含第一编程语言代码以及用于描述所述隐私操作的伪汇编代码的文本文件;
根据所述目标源码中的输入符号和输出符号,构建输入符号名称列表、输入符号数值列表、以及输出符号名称列表;
执行所述目标文件,以及在执行到所述目标文件中的隐私操作时,根据所述伪汇编代码、所述输入符号名称列表、所述输入符号数值列表、以及所述输出符号名称列表,生成第一参数;
通过第一接口向虚拟执行器接口模块传递所述第一参数,所述虚拟执行器接口模块用于基于所述第一参数,生成第二参数,并通过第二接口向底层执行器传递所述第二参数,所述底层执行器用于基于所述第二参数,执行所述隐私操作。
另一方面,本申请实施例公开了一种代码执行装置,所述装置用于执行第一编程语言实现的目标源码,所述目标源码中包含以动态库形式存在的第二编程语言实现的隐私操作,所述装置包括:
编译处理模块,用于对所述目标源码进行编译处理,得到目标文件,所述目标文件中包含第一编程语言代码以及用于描述所述隐私操作的伪汇编代码的文本文件;
符号构建模块,用于根据所述目标源码中的输入符号和输出符号,构建输入符号名称列表、输入符号数值列表、以及输出符号名称列表;
代码执行模块,用于执行所述目标文件,以及在执行到所述目标文件中的隐私操作时,根据所述伪汇编代码、所述输入符号名称列表、所述输入符号数值列表、以及所述输出符号名称列表,生成第一参数;
底层调用模块,用于通过第一接口向虚拟执行器接口模块传递所述第一参数,所述虚拟执行器接口模块用于基于所述第一参数,生成第二参数,并通过第二接口向底层执行器传递所述第二参数,所述底层执行器用于基于所述第二参数,执行所述隐私操作。
再一方面,本申请实施例公开了一种用于代码执行的装置,所述装置用于执行第一编程语言实现的目标源码,所述目标源码中包含以动态库形式存在的第二编程语言实现的隐私操作,所述装置包括有存储器,以及至少一个程序,所述至少一个程序存储于存储器中,且经配置以由至少一个处理器执行所述至少一个程序包含用于进行以下操作的指令:
对所述目标源码进行编译处理,得到目标文件,所述目标文件中包含第一编程语言代码以及用于描述所述隐私操作的伪汇编代码的文本文件;
根据所述目标源码中的输入符号和输出符号,构建输入符号名称列表、输入符号数值列表、以及输出符号名称列表;
执行所述目标文件,以及在执行到所述目标文件中的隐私操作时,根据所述伪汇编代码、所述输入符号名称列表、所述输入符号数值列表、以及所述输出符号名称列表,生成第一参数;
通过第一接口向虚拟执行器接口模块传递所述第一参数,所述虚拟执行器接口模块用于基于所述第一参数,生成第二参数,并通过第二接口向底层执行器传递所述第二参数,所述底层执行器用于基于所述第二参数,执行所述隐私操作。
又一方面,本申请实施例公开了一种机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得装置执行如前述一个或多个所述的代码执行方法。
本申请实施例通过自定义的伪汇编代码和虚拟执行器接口模块,可以驱动多种不同算法类型的底层执行器。对于隐私保护计算框架的使用者来说,可以根据不同场景选择合适的底层执行器,使得底层执行器的执行过程与前端的第一编程语言无关,为隐私操作提供一个跨语言、跨平台的执行环境,减少二次开发的成本。
此外,本申请实施例将第一编程语言实现的目标源码转换为目标文件,目标文件中包含第一编程语言代码以及用于描述目标源码中隐私操作的伪汇编代码。这样,在第一编程语言的执行环境执行该目标文件的过程中,当执行到隐私操作时,调用虚拟执行器接口模块,并且向虚拟执行器接口模块传递第一参数。虚拟执行器接口模块根据第一参数生成第二参数,并且根据第二参数选择适合当前隐私操作场景的底层执行器,向该底层执行器传递第二参数,以指示底层执行器执行具体的操作。所述底层执行器由第二编程语言实现,运行在第二编程语言的执行环境中。
由此,在执行到隐私操作时,第一编程语言的执行环境只需调用一次虚拟执行器接口模块,向虚拟执行器接口模块传递第一参数后,虚拟执行器接口模块即可根据第一参数为底层执行器指定具体的操作,并调用相应的底层执行器。可以看出,通过本申请实施例,对于第一编程语言的执行环境和第二编程语言的执行环境,只需在内存中保留一份数据参数即可,可以减少跨语言调用时在内存里进行大量无效的传递及返回操作,从而提高代码执行效率,以及优化内存的使用率。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请的一种代码执行方法实施例的步骤流程图;
图2是本申请的一种编译执行环境示意图;
图3是本申请的一种编译执行环境的模块结构示意图;
图4是本申请的代码清单3第1行的数据传递示意图;
图5是本申请的代码清单3第2行的数据传递示意图;
图6是本申请的代码清单3第3行的数据传递示意图;
图7是本申请的一种代码执行装置实施例的步骤流程图;
图8是本申请的一种用于代码执行的装置800的框图;
图9是本申请的一些实施例中服务器的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
方法实施例
参照图1,示出了本申请的一种代码执行方法实施例的步骤流程图,所述方法用于执行第一编程语言实现的目标源码,所述目标源码中包含以动态库形式存在的第二编程语言实现的隐私操作,所述方法可以包括如下步骤:
步骤101、对所述目标源码进行编译处理,得到目标文件,所述目标文件中包含第一编程语言代码以及用于描述所述隐私操作的伪汇编代码的文本文件;
步骤102、根据所述目标源码中的输入符号和输出符号,构建输入符号名称列表、输入符号数值列表、以及输出符号名称列表;
步骤103、执行所述目标文件,以及在执行到所述目标文件中的隐私操作时,根据所述伪汇编代码、所述输入符号名称列表、所述输入符号数值列表、以及所述输出符号名称列表,生成第一参数;
步骤104、通过第一接口向虚拟执行器接口模块传递所述第一参数,所述虚拟执行器接口模块用于基于所述第一参数,生成第二参数,并通过第二接口向底层执行器传递所述第二参数,所述底层执行器用于基于所述第二参数,执行所述隐私操作。
本申请实施例可用于执行第一编程语言实现的目标源码,所述目标源码用于实现包含隐私操作的密文处理系统,所述目标源码可以包括基于第一编程语言的系统框架,以及基于第二编程语言的隐私操作,所述隐私操作以动态库形式包含在所述目标源码中。
需要说明的是,第一编程语言和第二编程语言中的“第一”和“第二”仅用于区分密文处理系统的前端框架和后端隐私操作可以基于不同编程语言实现,并不表示具体的编程语言种类。
本申请实施例对第一编程语言和第二编程语言的语言种类不加以限制。例如,所述第一编程语言可以包括:Python语言、Java语言、C语言、R语言等。所述第二编程语言可以包括:C/C++语言、Go语言、Rust语言等。所述第一编程语言和第二编程语言可以为不同的编程语言。为便于描述,本申请实施例中均以第一编程语言为Python语言,第二编程语言为C++语言为例进行说明。
其中,所述隐私操作指基于密文对数据进行的操作,所述隐私操作可以通过基于密文的数据处理算法实现,所述数据处理算法可以包括数据计算、模型训练、数据库查询等算法。在对数据的隐私操作过程中,数据以密文形式存在,不会暴露数据的明文。可选地,所述隐私操作可以包括如下任意一项或多项:基于密文的计算操作、基于密文的模型训练、基于密文的数据库查询操作等。
例如,所述隐私操作可以包括:对数据密文进行加、减、乘、除、求平均等计算操作,对数据密文进行比较操作,利用数据密文进行机器学习、人工智能等模型训练及预测,对数据密文进行数据库查询操作等。
需要说明的是,所述隐私操作可以通过调用多方安全计算平台来实现。所述多方安全计算平台可以提供多方安全计算服务,多方安全计算为基于密文的计算,参与计算的数据包含密文数据,且计算过程中产生的中间结果以及最终的计算结果也为密文数据。在基于密文的计算过程中,不会暴露数据明文,可以保证数据的隐私安全性。
为了减少对目标源码的二次开发,以及减少第一编程语言的执行环境与第二编程语言的执行环境之间的交互,提高代码执行的效率,本申请实施例为隐私操作提供一个跨语言、跨平台的执行环境。
为实现该跨语言、跨平台的执行环境,本申请实施例首先对第一编程语言的编译器进行扩展,得到多语言编译器,多语言编译器可以将不同第一编程语言实现的目标源码转换为目标文件,目标文件中包含第一编程语言代码以及用于描述隐私操作的伪汇编代码的文本文件。
此外,本申请实施例在编译执行环境中还增加了虚拟执行器接口模块,虚拟执行器接口模块作为第一编程语言执行器与底层执行器之间的接口,可以为跨语言、跨平台的隐私操作提供执行环境,提高代码执行的效率。
参照图2,示出了本申请实施例的一种编译执行环境示意图。如图2所示,该编译执行环境包括多语言编译器201、虚拟执行器接口模块202以及底层执行器203。其中,多语言编译器融合了多种第一编程语言的解释器(Parser),并且增加了编译器扩展模块。虚拟执行器接口模块存在于多语言编译器和底层执行器之间,用于接收多语言编译器传递的第一参数,并且基于第一参数生成第二参数,通过第二接口向底层执行器传递第二参数,为底层执行器指定具体的操作。底层执行器为执行隐私操作的真实执行器。
在本申请实施例中,所述密文处理系统支持的计算框架不仅包括基于SS(SecretSharing,秘密分享)策略的多方安全计算平台,还可以包括基于混淆电路的多方安全计算平台。可选地,所述底层执行器包括如下任意一种:基于SS(Secret Sharing,秘密分享)的执行器、基于HE(Homomorphic Encryption,同态加密)的执行器、基于TEE(TrustedExecution Environment,可信执行环境)的执行器。
通过本申请实施例的编译执行环境,可以根据不同的应用场景,在数据保密性以及执行效率方面,进行定制化操作,以选择更适用于当前应用场景的底层执行器。例如,如果密文处理系统的所有计算节点都支持可信执行环境(TEE),则可以将底层执行器切换至基于TEE的执行器。又如,如果密文处理系统对网络延时的诉求很高,但是可以提供强大的计算资源,甚至可以提供专门的密码硬件加速模块来支持同态加密计算(HE),则可以将底层执行器切换至基于HE的执行器。再如,如果密文处理系统对网络延时的要求不高,而且硬件并不支持可信执行环境,同时参与计算的硬件性能有限,这种情况下,可以将底层执行器切换至基于秘密分享(SS)的执行器。如何选择具体的底层执行器,可以通过虚拟执行器接口模块中的执行器选择模块来完成。由此,本申请实施例可以根据不同的应用场景,切换不同类型的底层执行器,可以减少单一平台引入的缺陷,提高代码执行的效率。
参照图3,示出了本申请的一种编译执行环境的模块结构示意图。如图3所示,多语言编译器包括第一语言编译器301(如Python编译器)和编译器扩展模块302,所述编译器扩展模块302包括:ASM伪指令模块3021、常量符号化模块3022、broadcasting模块3023,输入符号赋值模块3024、符号表3025以及输出符号模块3026。虚拟执行器接口模块303包括:操作码分析模块3031、输入符号构建模块3032,输出符号构建模块3033,全局符号映射模块3034以及prorobuf接口模块3035。其中,所述虚拟执行器接口模块与所述多语言编译器中的编译器扩展模块构成了本申请的虚拟执行器,该虚拟执行器为跨语言、跨平台的隐私操作执行环境提供了实现基础。
如图3所示,本申请实施例首先通过多语言编译器对所述目标源码进行编译处理,得到目标文件,所述目标文件中包含第一编程语言代码以及用于描述所述隐私操作的伪汇编代码的文本文件。
一个示例中,如下代码清单1示出了第一编程语言为Python语言的目标源码中的部分代码。
代码清单1:
1. import privpy as pp
2. x = pp.iarr([5, 2, 100, 10])
3. s1 = x + 1
4. pp.reveal(s1, "res1")
5. print("s1 : ",s1)
代码清单1通过Python语言实现IntArr类型的加法操作,如其中第3行所示:s1 =x + 1,该加法操作为基于密文的隐私操作。
上述代码清单1通过多语言编译器的编译处理,转换为目标文件,该目标文件中包含Python语言代码以及用于描述所述隐私操作的伪汇编代码的文本文件。具体地,所述目标文件如下代码清单2所示。
代码清单2:
1. import privpy as pp
2. import numpy as np
3.
4. x = pp.iarr([5, 2, 100, 10])
5. asm_code_string = "external/privpy_asm_simple.txt"
6. y = [1,1,1,1]
7. asm_data = []
8. asm_data.append(x)
9. asm_data.append(y)
10.
11. asm_sym_name = []
12. asm_sym_name.append("x")
13. asm_sym_name.append("y")
14.
15. out_sym_name = []
16. out_sym_name.append("s1")
17.
18. s1 = pp.exec_code(asm_code_string, asm_data, asm_sym_name, out_sym_name)
19.
20. pp.reveal(pp.iarr(s1), "res1")
在上述代码清单2中,第5行中的“external/privpy_asm_simple.txt”表示用于描述代码清单1中隐私操作的伪汇编代码的文本文件,第5行代码是通过编译器扩展模块中的ASM伪指令模块产生的,ASM伪指令模块用于将目标源码中的隐私操作代码转换为自定义语言的伪汇编代码。ASM伪指令模块以目标源码为输入,输出如下代码清单3所示的伪汇编代码。
代码清单3:
1. Init IR5-1 y
2. Add IR5-2 x IR5-1
3. ASSIGN s1 IR5-2
上述代码清单3为对代码清单1中的第3行代码转换得到的伪汇编代码。
为了使得底层执行器可以执行不同编程语言实现的隐私操作,本申请实施例的编译器扩展模块根据所述目标源码中的输入符号和输出符号,构建输入符号名称列表、输入符号数值列表、以及输出符号名称列表,由此可以提取目标源码中输入符号和输出符号的信息,将这些输入符号和输出符号的信息作为参数传递给虚拟执行器接口模块,以使虚拟执行器接口模块根据这些输入符号和输出符号的信息,为底层执行器指定具体的操作。
其中,所述伪汇编代码符合自定义语言的规则和格式,例如,在上述代码清单3中,第一列中的符号Init、Add以及ASSIGN均为自定义的操作码,用于表示对操作数执行的操作类型。需要说明的是,本申请实施例对如何设置伪汇编代码的自定义语言的规则和格式不做限制。
在本申请的一种可选实施例中,步骤102所述根据所述目标源码中的输入符号和输出符号,构建输入符号名称列表、输入符号数值列表、以及输出符号名称列表,可以包括如下步骤:
步骤S11、基于编译过程产生的符号表,确定所述目标源码中每个符号的属性特征;
步骤S12、根据所述属性特征,确定所述目标源码中的输入符号和输出符号;
步骤S13、根据所述输入符号的名称,构建输入符号名称列表,以及根据所述输入符号的数值,构建输入符号数值列表;
步骤S14、根据所述输出符号的名称,构建输出符号名称列表。
Python编译器对目标源码进行编译的过程中会产生符号表,符号表在编译过程中可以不断收集、记录目标源码中一些语法符号的类型和特征等相关信息。这些信息一般以表格形式存储于系统中。
基于编译过程产生的符号表,可以确定所述目标源码中每个符号的属性特征,所述属性特征包括is_assigned 特征或is_referenced特征。如果某个符号的属性特征为is_assigned,则可以确定该符号为输出符号;如果某个符号的属性特征为is_referenced,则可以确定该符号为输入符号。
编译器扩展模块中的输入符号赋值模块可用于根据所述符号表,获取目标源码中输入符号的名称,并且构建输入符号名称列表;以及根据输入符号的数值,构建输入符号数值列表。
例如,在如上代码清单2中,代码行7-9和代码行11-13是通过编译器扩展模块中的输入符号赋值模块完成的。输入符号赋值模块通过Python编译器产生的符号表,对目标源码中每个符号的is_assigned 或is_referenced属性特征进行分析,获取输入符号的名称,构建输入符号名称列表(代码行11-13)。另外,输入符号赋值模块根据该输入符号名称列表中每个输入符号的数值,构建输入符号数值列表(代码行7-9)。该输入符号名称列表和该输入符号数值列表将作为参数传递给虚拟执行器接口模块。
一个示例中,对于上述代码清单2,其中的“x”和“y”均为输入符号的名称。pp.iarr([5, 2, 100, 10])为输入符号x的数值,[1,1,1,1]为输入符号y的数值。
编译器扩展模块中的输出符号模块可用于根据所述符号表,获取目标源码中输出符号的名称,并且构建输出符号名称列表。在如上代码清单2中,代码行15-16是通过编译器扩展模块中的输出符号模块完成的。
需要说明的是,本申请中的输出符号可以包括两部分的内容。一部分是根据第一编程语言代码中的输出符号构建的输出符号名称列表,如上述代码清单2中的代码行15-16所示;另一部分是伪汇编代码中的输出符号,如代码清单3中的第3行所示,ASSIGN操作的第一个操作数表示为输出符号。
在本申请的一种可选实施例中,所述方法还可以包括:
步骤S21、对所述目标源码中的常量进行变量化处理,得到所述常量对应的变量;
步骤S22、将所述变量的名称作为输入符号的名称,加入所述输入符号名称列表,以及将所述变量的数值作为输入符号的数值,加入所述输入符号数值列表。
在具体实施中,基于秘密分享(SS)的隐私操作通常不支持常量计算。在基于秘密分享(SS)的隐私操作中,参与计算的数据类型只有定点变量。此外,对于多方安全计算平台,所有参与密文计算的数据必须是密文变量,而不能使用常量。例如,在密文计算中,某用户的密码“123345”,则该密码值“123456”不能再按照常量值进行处理,而需要转换成密文变量。
为了使得目标源码中的隐私操作可以适用于不同的多方安全计算平台,本申请实施例对所述目标源码中的常量进行变量化处理,得到所述常量对应的变量。
在如上代码清单2中,第6行代码将常量1转换为变量y,该步骤是通过编译器扩展模块中的常量符号化模块和broadcasting模块完成的。其中,常量符号化模块的作用是将常量的具体数值赋予一个变量的名字。比如,y = 1,z = 2等。目的是为了使得输入符号模块中的“符号”保持一致。Broadcasting模块的作用是将形状不同的变量转换为一致的形状。例如,对于上述代码清单1,常量符号化模块和broadcasting模块将第3行的常量1进行变量化处理,转换为常量1对应的变量。具体地,根据第3行代码得知,常量1与变量x执行加法操作,并且对变量x进行分析,得知变量x的type(类型)是IntArr,以及变量x的shape(形状)为(1,4)。因此,通过常量符号化模块对常量1赋予变量名y,也即y=1。由于变量y的shape为(1,1),而变量x的shape为(1,4),因此通过broadcasting模块将变量y的形状转换得与变量x的形状一致,也即,将y=1转换为 y=[1,1,1,1]。
将目标源码中的常量转换为变量之后,将该变量的名称(如y)作为输入符号的名称,加入输入符号名称列表,以及将该变量的数值(如[1,1,1,1])作为输入符号的数值,加入输入符号数值列表。
需要说明的是,由于目标源码中并不存在将常量转换得到的变量,因此,在将目标源码中的常量转换为变量之后,还需要对转换得到的变量执行Init(初始化)操作,如代码清单3的第1行所示,在底层执行器中,该初始化操作由Init指令来协调完成。
本申请实施例将常量转换为变量后,对于相同数值的常量,在内存中只需要保存一份。比如对于常量1,在目标源码中出现了10次,如果按照常量进行处理,需要分配10个内存单元来保存10份数值为1的常量。本申请实施例将常量1转换为变量之后,只需要分配1个内存单元来保存1份数值为1的变量,可以减少目标源码占用的内存空间。
需要说明的是,在本申请实施例中,首先通过常量符号化模块和broadcasting模块对目标源代码中的常量进行变量化处理;然后通过符号表和输入符号赋值模块构建输入符号名称列表以及构建输入符号数值列表;接下来通过符号表和输出符号模块构建输出符号名称列表;最后通过ASM伪指令模块生成目标源码中隐私操作对应的伪汇编代码的文本文件。
通过第一编程语言编译器和编译器扩展模块,对目标源码(代码清单1)进行编译处理,得到目标文件(代码清单2)后,可以执行目标文件,在执行到所述目标文件中的隐私操作时,根据所述伪汇编代码、所述输入符号名称列表、所述输入符号数值列表、以及所述输出符号名称列表,生成第一参数。通过第一接口向虚拟执行器接口模块传递所述第一参数,以执行所述隐私操作,所述虚拟执行器接口模块的输入参数为所述第一参数。
一个示例中,第一接口为自定义的exec_code()函数。在本申请实施例中,所述目标源码中包含以动态库形式存在的第二编程语言实现的隐私操作,所述隐私操作需要调用多方安全计算平台来执行。当多方安全计算平台接收到该隐私操作的计算任务时,可以调用第一语言编译器以及编译器扩展模块对隐私操作的代码进行处理,生成第一参数。然后通过exec_code()函数调用虚拟执行器接口模块,该函数的输入参数为所述第一参数。如代码清单2中的第18行代码所示,该行代码用于执行隐私操作,并且将隐私操作的结果赋值给变量s1。该隐私操作通过调用虚拟执行器接口模块实现。具体地,通过exec_code()函数调用虚拟执行器接口模块,并且向虚拟执行器接口模块传递第一参数。第一参数包括:asm_code_string(伪汇编代码)、asm_data(输入符号数值列表)、asm_sym_name(输入符号名称列表)、out_sym_name(输出符号名称列表)。
虚拟执行器接口模块基于所述第一参数,生成第二参数,所述第二参数用于为底层执行器指定具体的操作。虚拟执行器接口模块通过第二接口向底层执行器传递所述第二参数,所述底层执行器基于所述第二参数,执行相应操作以完成目标源码中的隐私操作。
在本申请的一种可选实施例中,步骤104所述通过所述第一参数调用虚拟执行器接口模块之后,所述方法还可以包括:
根据所述第一参数,建立全局符号映射表,所述全局符号映射表用于保存输入符号的信息、输出符号的信息、以及中间结果的信息。
如图3所示,虚拟执行器接口模块包括操作码分析模块、输入符号构建模块、输出符号构建模块、全局符号映射模块以及Protobuf接口模块。其中,全局符号映射模块可用于根据所述第一参数,建立全局符号映射表,并且保存所述全局符号映射表以及在代码执行过程中更新所述全局符号映射表。
所述全局符号映射表用于保存输入符号的信息、输出符号的信息、以及中间结果的信息。
在本申请的一种可选实施例中,所述输入符号的信息包括:输入符号的名称(name)、输入符号的形状(shape)、输入符号的数值(value)、输入符号的类型(type);所述输出符号的信息包括:输出符号的名称(name)、输出符号的形状(shape)、输出符号的数值(value)、输出符号的类型(type);所述中间结果的信息包括:中间结果的名称(name)、中间结果的形状(shape)、中间结果的数值(value)、中间结果的类型(type)。
在本申请的一种可选实施例中,步骤104中所述基于所述第一参数,生成第二参数,包括:
步骤S31、逐行执行所述伪汇编代码,获取当前待操作的目标输入符号、目标输出符号、以及目标操作码;
步骤S32、将所述目标输入符号的名称作为索引值,检索所述全局符号映射表,得到所述目标输入符号的信息,以及将所述目标输出符号的名称作为索引值,检索所述全局符号映射表,得到所述目标输出符号的信息;
步骤S33、将所述目标输入符号的信息、所述目标输出符号的信息、以及所述目标操作码的类型作为所述第二参数。
虚拟执行器接口模块接收的第一参数中包括asm_code_string(伪汇编代码),虚拟执行器接口模块逐行执行该伪汇编代码,获取当前待操作的目标输入符号、目标输出符号、以及目标操作码。
在本申请的一种可选实施例中,所述目标操作码为根据所述伪汇编代码中的预置列所确定,所述目标输入符号包括所述目标操作码对应的操作数和/或中间结果。
在本申请实施例中,伪汇编代码中的预置列用于表示自定义的操作码。所述操作码可用于支持目标源码中的隐私操作。例如,所述操作码可以包括比较操作,如比较相等(Eq)、比较小于等于(LtE)、比较大于等于(GtE)、比较小于(Lt)、比较大于(Gt)。所述自定义的操作码还可以包括加(Add)、减(Sub)、乘(Mult)、除(Div)、求平均(Avg)等计算操作、以及赋值操作(ASSIGN)等。
可以理解,本申请实施例对所述预置列在伪汇编代码中的位置不加以限制,一个示例中,所述预置列为伪汇编代码中的第一列。如代码清单3所示,第一列中的Init、Add、ASSIGN为自定义的操作码。
以上述代码清单3为例,虚拟执行器接口模块逐行执行代码清单3所示的伪汇编代码的过程中,虚拟执行器接口模块中的操作码分析模块用于确定当前操作的目标操作码。操作码分析模块可以根据伪汇编代码中每一行的第一列的符号,得到当前操作的目标操作码。例如,在执行到代码清单3的第1行时,目标操作码为Init,该行代码用于对变量y进行初始化操作,并且将初始化的值保存在寄存器IR5-1中。在执行到代码清单3的第2行时,目标操作码为Add,该行代码用于对输入符号x的数值和输入符号IR5-1的数值进行基于密文的加法操作,并且将操作结果保存至寄存器IR5-2中。在执行到代码清单3的第3行时,目标操作码为ASSIGN,该行代码用于将寄存器IR5-2中的数值赋值给变量s1。
目标输入符号可以由虚拟执行器接口模块中的输入符号构建模块所确定,目标输入符号包括所述目标操作码对应的操作数和/或中间结果。例如,在执行到代码清单3的第1行时,可以确定目标操作码为Init,以及确定目标输入符号为目标操作码Init对应的操作数y。
在执行到代码清单3的第2行(Add IR5-2 x IR5-1)时,该行包括4个符号,第一个符号为Add,第二个符号为IR5-2,第三个符号为x,第四个符号为IR5-1。第一个符号Add为目标操作码,第二、三、四个符号均为目标输入符号。其中,第三个符号x和第四个符号IR5-1分别表示参与Add计算的第一个操作数和第二个操作数。第二个符号IR5-2作为中间变量,表示第三、四个符号经过Add计算得到的结果。
获取当前待操作的目标输入符号、目标输出符号之后,将所述目标输入符号的名称作为索引值,检索所述全局符号映射表,可以得到所述目标输入符号的信息,以及将所述目标输出符号的名称作为索引值,检索所述全局符号映射表,得到所述目标输出符号的信息;将所述目标输入符号的信息、所述目标输出符号的信息、以及所述目标操作码的类型作为第二参数。
一个示例中,在执行到伪汇编代码(代码清单3)的第2行时,该行代码用于对目标输入符号(变量y)执行目标操作码(Init)对应的操作。虚拟执行器接口模块中的输入符号构建模块将该目标输入符号的名称(y)作为索引值,检索所述全局符号映射表,得到该目标输入符号的信息(name、shape、value、type)。虚拟执行器接口模块中的输出符号构建模块为每一个操作指定一个目标输出符号,在这种场景中,输出符号为中间变量。例如,在代码清单3的第1行,IR5-1为目标输出符号。在代码清单3的第2行,IR5-2为目标输出符号。在代码清单3的第3行,s1为目标输出符号。需要说明的是,此时目标输出符号的值(value)为空。虚拟执行器接口模块中的输出符号构建模块将所述目标输出符号的名称作为索引值,检索所述全局符号映射表,可以得到所述目标输出符号的信息(name、shape、type)。
虚拟执行器接口模块根据所述目标输入符号的信息、所述目标输出符号的信息、以及所述目标操作码的类型,得到第二参数。所述第二参数用于为底层执行器指定具体操作。虚拟执行器接口模块通过第二接口向底层执行器传递所述第二参数,所述底层执行器基于所述第二参数,执行相应操作以完成目标源码中的隐私操作。
在本申请的一种可选实施例中,所述第二接口为Protobuf接口,所述Protobuf接口通过第一函数向所述底层执行器传递第二参数,以及通过第二函数向所述虚拟执行器接口模块传递赋值后的目标输出符号。
Protobuf(Google Protocol Buffer)是用于数据交换的序列结构化数据格式,具有跨平台、跨语言、可扩展特性,以及更小的传输体积、更高的编码、解码能力,适用于数据存储、网络数据传输等对存储体积、实时性要求高的场景。
在本申请实施例中,Protobuf接口用于在虚拟执行器接口模块和底层执行器之间进行数据交换。Protobuf接口通过第一函数从虚拟执行器接口模块向底层执行器传递第二参数,以指定底层执行器执行具体的隐私操作,以及通过第二函数从底层执行器向虚拟执行器接口模块传递隐私操作结果。
其中,第一函数可以为SerializeToString(),通过该函数将Protobuf的内容转换为字符串形式,传递给底层执行器。本申请实施例将目标输入符号的信息、目标输出符号的信息、以及目标操作码的类型作为第二参数,传递给Protobuf接口,作为Protobuf的内容。此时目标输出符号的值为空。第二函数可以为ParseFromString(),通过该函数对底层执行器返回的字符串解析得到Protobuf的值,传递给虚拟执行器接口模块。通过ParseFromString()返回的Protobuf的值即为执行当前代码行的输出结果,如赋值后的目标输出符号。此时目标输出符号具有真实值。
在本申请的一种可选实施例中,步骤104中所述基于所述第二参数,执行所述隐私操作,包括:
步骤S41、根据所述目标输入符号的信息,对所述目标输入符号按照所述目标操作码的类型执行隐私操作,得到隐私操作结果;
步骤S42、将所述隐私操作结果赋值给所述目标输出符号,并通过所述第二接口将赋值后的目标输出符号返回给所述虚拟执行器接口模块。
虚拟执行器接口模块接收到编译扩展模块传递的第一参数后,根据第一参数中的输入符号的信息和输出符号的信息,建立全局符号映射表。以上述代码清单3所示的伪汇编代码为例,在首次执行到伪汇编代码的第1行时,虚拟执行器接口模块中的输入符号构建模块根据目标输入符号y的名称,从全局符号映射表中找到目标输入符号y的信息,通过in_params参数将目标输入符号y的信息(name、shape、value、type)写入到Protobuf接口中;同时,输出符号构建模块通过out_sym参数将目标输出符号IR5-1的信息(name、shape、type)写入到Protobuf接口中;此外,虚拟执行器接口模块还将目标操作码Init的信息(如目标操作码的名称和类型)传入到Protobuf接口中。由此,虚拟执行器接口模块完成了生成第二参数的过程。
参照图4,示出了代码清单3第1行的数据传递示意图。虚拟执行器接口模块根据第二参数(目标输入符号y的信息、目标输出符号IR5-1的信息、以及目标操作码Init的类型)选择底层执行器。在具体实施中,底层执行环境中可以包括多种不同底层执行器组成的执行器组。虚拟执行器接口模块根据第二参数从执行器组中选择底层执行器,并将第二参数通过SerializeToString()函数传递给所选择的底层执行器。底层执行器根据接收的目标输入符号y的信息,对目标输入符号y按照目标操作码Init的类型执行隐私操作,得到隐私操作结果,并且将隐私操作结果赋值给目标输出符号IR5-1;最后通过ParseFromString()函数将赋值后的目标输出符号IR5-1返回给虚拟执行器接口模块。虚拟执行器接口模块将接收到的赋值后的目标输出符号IR5-1插入到全局符号映射表中。
在本申请的一种可选实施例中,所述通过所述第二接口将所述目标输出符号的数值返回给所述虚拟执行器接口模块之后,所述方法还可以包括:根据所述赋值后的目标输出符号,更新所述全局符号映射表。
在本申请实施例中,输出符号构建模块可以实现两种操作。第一种操作是在虚拟执行器接口模块向底层执行器传递参数的过程中,为每一个目标操作码指定一个目标输出符号,在这种情况下,该目标输出符号为中间变量,也就是伪汇编代码中每行的第二个符号。第二种操作是从底层执行器接收赋值后的目标输出符号,并且根据所述赋值后的目标输出符号,更新所述全局符号映射表。例如,可以将赋值后的目标输出符号作为一个新符号,以及将该目标输出符号的数值作为该新符号的数值,将该新符号的名称和数值插入到全局符号映射表中,用于在后续操作需要使用该新符号时,可以查询使用。两种操作的区别在于,在第一种操作中,目标输出符号的值为空;在第二种操作中,目标操作符号的值被赋值为底层执行器返回的真实值。
参照图5,示出了代码清单3第2行的数据传递示意图。在执行到伪汇编代码的第2行时,虚拟执行器接口模块中的输入符号构建模块根据目标输入符号x和IR5-1的名称,从全局符号映射表中找到目标输入符号x和IR5-1的信息,通过in_params参数将目标输入符号x和IR5-1的信息写入到Protobuf接口中;同时,输出符号构建模块通过out_sym参数将目标输出符号IR5-2的信息写入到Protobuf接口中;此外,虚拟执行器接口模块还将目标操作码Add的信息(如目标操作码的名称和类型)传入到Protobuf接口中。由此,虚拟执行器接口模块完成了生成第二参数的过程。
虚拟执行器接口模块根据第二参数(目标输入符号x和IR5-1的信息、目标输出符号IR5-2的信息、以及目标操作码Add的类型)选择底层执行器,并将第二参数通过SerializeToString()函数传递给所选择的底层执行器。底层执行器根据接收的目标输入符号x和IR5-1的信息,对目标输入符号x和IR5-1按照目标操作码Add的类型执行隐私操作,得到隐私操作结果,也即对操作数x的数值和寄存器IR5-1中的数值基于密文执行加法计算,得到计算结果,该计算结果为密文;底层执行器将该计算结果赋值给目标输出符号IR5-2,并且通过ParseFromString()函数将赋值后的目标输出符号IR5-2返回给虚拟执行器接口模块。虚拟执行器接口模块将接收到的赋值后的目标输出符号IR5-2插入到全局符号映射表中。
参照图6,示出了代码清单3第3行的数据传递示意图。该过程与图4和图5类似,此处不再进行赘述。
在本申请的一个示例中,全局符号映射模块包括OperationWrapper类和OpertionGroupWrapper类。其中OpertionWrapper类用于处理asm_sym_name和asm_data中的每一个符号,处理过程可以通过函数set_symbol_name()、 set_symbol_type()、set_symbol_shape以及set_symbol_value()来实现。
OperationGroupWrapper类是一个以符号名为索引的map对象,其中map的value是一个OperationWrapper类的对象。该类的目的主要是保存虚拟执行器接口模块接收到的各符号的值。此外,从底层执行器executor返回的结果,也会以一个OperationWrapper对象的方式,插入到全局符号映射模块OpertionGroupWrapper类的对象中。
可以理解,上述OperationWrapper类和OpertionGroupWrapper类仅作为本申请的一个应用示例,在具体实施中,本申请对全局符号映射模块中使用的类以及函数不做限制。
综上,本申请实施例通过自定义的伪汇编代码和虚拟执行器接口模块,可以驱动多种不同算法类型的底层执行器。对于隐私保护计算框架的使用者来说,可以根据不同场景选择合适的底层执行器,使得底层执行器的执行过程与前端的第一编程语言无关,为隐私操作提供一个跨语言、跨平台的执行环境,减少二次开发的成本。
此外,本申请实施例将第一编程语言实现的目标源码转换为目标文件,目标文件中包含第一编程语言代码以及用于描述目标源码中隐私操作的伪汇编代码。这样,在第一编程语言的执行环境执行该目标文件的过程中,当执行到隐私操作时,调用虚拟执行器接口模块,并且向虚拟执行器接口模块传递第一参数。虚拟执行器接口模块根据第一参数生成第二参数,并且根据第二参数选择适合当前隐私操作场景的底层执行器,向该底层执行器传递第二参数,以指示底层执行器执行具体的操作。所述底层执行器由第二编程语言实现,运行在第二编程语言的执行环境中。
由此,在执行到隐私操作时,第一编程语言的执行环境只需调用一次虚拟执行器接口模块,向虚拟执行器接口模块传递第一参数后,虚拟执行器接口模块即可根据第一参数为底层执行器指定具体的操作,并调用相应的底层执行器。可以看出,通过本申请实施例,对于第一编程语言的执行环境和第二编程语言的执行环境,只需在内存中保留一份数据参数即可,可以减少跨语言调用时在内存里进行大量无效的传递及返回操作,从而提高代码执行效率,以及优化内存的使用率。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请实施例并不受所描述的动作顺序的限制,因为依据本申请实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本申请实施例所必须的。
装置实施例
参照图7,示出了本申请的一种代码执行装置实施例的结构框图,所述装置用于执行第一编程语言实现的目标源码,所述目标源码中包含以动态库形式存在的第二编程语言实现的隐私操作,所述装置具体可以包括:
编译处理模块701,用于对所述目标源码进行编译处理,得到目标文件,所述目标文件中包含第一编程语言代码以及用于描述所述隐私操作的伪汇编代码的文本文件;
符号构建模块702,用于根据所述目标源码中的输入符号和输出符号,构建输入符号名称列表、输入符号数值列表、以及输出符号名称列表;
代码执行模块703,用于执行所述目标文件,以及在执行到所述目标文件中的隐私操作时,根据所述伪汇编代码、所述输入符号名称列表、所述输入符号数值列表、以及所述输出符号名称列表,生成第一参数;
底层调用模块704,用于通过第一接口向虚拟执行器接口模块传递所述第一参数,所述虚拟执行器接口模块用于基于所述第一参数,生成第二参数,并通过第二接口向底层执行器传递所述第二参数,所述底层执行器用于基于所述第二参数,执行所述隐私操作。
可选地,所述符号构建模块702,可以包括:
属性确定子模块,用于基于编译过程产生的符号表,确定所述目标源码中每个符号的属性特征;
符号确定子模块,用于根据所述属性特征,确定所述目标源码中的输入符号和输出符号;
输入符号列表构建子模块,用于根据所述输入符号的名称,构建输入符号名称列表,以及根据所述输入符号的数值,构建输入符号数值列表;
输出符号列表构建子模块,用于根据所述输出符号的名称,构建输出符号名称列表。
可选地,所述装置还可以包括:
常量符号处理模块,用于对所述目标源码中的常量进行变量化处理,得到所述常量对应的变量;
常量符号添加模块,用于将所述变量的名称作为输入符号的名称,加入所述输入符号名称列表,以及将所述变量的数值作为输入符号的数值,加入所述输入符号数值列表。
可选地,所述装置还可以包括:
全局符号映射模块,用于根据所述第一参数,建立全局符号映射表,所述全局符号映射表用于保存输入符号的信息、输出符号的信息、以及中间结果的信息。
可选地,所述输入符号的信息包括:输入符号的名称、输入符号的形状、输入符号的数值、输入符号的类型;所述输出符号的信息包括:输出符号的名称、输出符号的形状、输出符号的数值、输出符号的类型;所述中间结果的信息包括:中间结果的名称、中间结果的形状、中间结果的数值、中间结果的类型。
可选地,所述底层调用模块704,可以包括:
目标确定子模块,用于逐行执行所述伪汇编代码,获取当前待操作的目标输入符号、目标输出符号、以及目标操作码;
目标索引子模块,用于将所述目标输入符号的名称作为索引值,检索所述全局符号映射表,得到所述目标输入符号的信息,以及将所述目标输出符号的名称作为索引值,检索所述全局符号映射表,得到所述目标输出符号的信息;
参数确定子模块,用于将所述目标输入符号的信息、所述目标输出符号的信息、以及所述目标操作码的类型作为所述第二参数。
可选地,所述目标操作码为根据所述伪汇编代码中的预置列所确定,所述目标输入符号包括所述目标操作码对应的操作数和/或中间结果。
可选地,所述底层调用模块704,可以包括:
操作执行子模块,用于根据所述目标输入符号的信息,对所述目标输入符号按照所述目标操作码的类型执行隐私操作,得到隐私操作结果;
结果返回子模块,用于将所述隐私操作结果赋值给所述目标输出符号,并通过所述第二接口将赋值后的目标输出符号返回给所述虚拟执行器接口模块。
可选地,所述装置还可以包括:
符号添加模块,用于根据所述赋值后的目标输出符号,更新所述全局符号映射表。
可选地,所述第二接口为Protobuf接口,所述Protobuf接口通过第一函数向所述底层执行器传递第二参数,以及通过第二函数向所述虚拟执行器接口模块传递所述赋值后的目标输出符号。
可选地,所述底层执行器包括如下任意一种:基于秘密分享的执行器、基于同态加密的执行器、基于可信执行环境的执行器。
本申请通过自定义的伪汇编代码和虚拟执行器接口模块,可以驱动多种不同算法类型的底层执行器。对于隐私保护计算框架的使用者来说,可以根据不同场景选择合适的底层执行器,使得底层执行器的执行过程与前端的第一编程语言无关,为隐私操作提供一个跨语言、跨平台的执行环境,减少二次开发的成本。
此外,在执行到隐私操作时,第一编程语言的执行环境只需调用一次虚拟执行器接口模块,向虚拟执行器接口模块传递第一参数后,虚拟执行器接口模块即可根据第一参数为底层执行器指定具体的操作,并调用相应的底层执行器。可以看出,通过本申请实施例,对于第一编程语言的执行环境和第二编程语言的执行环境,只需在内存中保留一份数据参数即可,可以减少跨语言调用时在内存里进行大量无效的传递及返回操作,从而提高代码执行效率,以及优化内存的使用率。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
本申请实施例提供了一种用于代码执行的装置,所述装置用于执行第一编程语言实现的目标源码,所述目标源码中包含以动态库形式存在的第二编程语言实现的隐私操作,所述装置包括有存储器,以及至少一个程序,所述至少一个程序存储于存储器中,且经配置以由至少一个处理器执行所述至少一个程序包含用于进行以下操作的指令:对所述目标源码进行编译处理,得到目标文件,所述目标文件中包含第一编程语言代码以及用于描述所述隐私操作的伪汇编代码的文本文件;根据所述目标源码中的输入符号和输出符号,构建输入符号名称列表、输入符号数值列表、以及输出符号名称列表;执行所述目标文件,以及在执行到所述目标文件中的隐私操作时,根据所述伪汇编代码、所述输入符号名称列表、所述输入符号数值列表、以及所述输出符号名称列表,生成第一参数;通过第一接口向虚拟执行器接口模块传递所述第一参数,所述虚拟执行器接口模块用于基于所述第一参数,生成第二参数,并通过第二接口向底层执行器传递所述第二参数,所述底层执行器用于基于所述第二参数,执行所述隐私操作。
图8是根据一示例性实施例示出的一种用于代码执行的装置800的框图。例如,装置800可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。
参照图8,装置800可以包括以下一个或多个组件:处理组件802,存储器804,电源组件806,多媒体组件808,音频组件810,输入/输出(I/ O)的接口812,传感器组件814,以及通信组件816。
处理组件802通常控制装置800的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理元件802可以包括一个或多个处理器820来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件802可以包括一个或多个模块,便于处理组件802和其他组件之间的交互。例如,处理组件802可以包括多媒体模块,以方便多媒体组件808和处理组件802之间的交互。
存储器804被配置为存储各种类型的数据以支持在设备800的操作。这些数据的示例包括用于在装置800上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器804可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
电源组件806为装置800的各种组件提供电力。电源组件806可以包括电源管理系统,一个或多个电源,及其他与为装置800生成、管理和分配电力相关联的组件。
多媒体组件808包括在所述装置800和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件808包括一个前置摄像头和/或后置摄像头。当设备800处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
音频组件810被配置为输出和/或输入音频信号。例如,音频组件810包括一个麦克风(MIC),当装置800处于操作模式,如呼叫模式、记录模式和语音信息处理模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器804或经由通信组件816发送。在一些实施例中,音频组件810还包括一个扬声器,用于输出音频信号。
I/ O接口812为处理组件802和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
传感器组件814包括一个或多个传感器,用于为装置800提供各个方面的状态评估。例如,传感器组件814可以检测到设备800的打开/关闭状态,组件的相对定位,例如所述组件为装置800的显示器和小键盘,传感器组件814还可以检测装置800或装置800一个组件的位置改变,用户与装置800接触的存在或不存在,装置800方位或加速/减速和装置800的温度变化。传感器组件814可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件814还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件814还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
通信组件816被配置为便于装置800和其他设备之间有线或无线方式的通信。装置800可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件816经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件816还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频信息处理(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
在示例性实施例中,装置800可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器804,上述指令可由装置800的处理器820执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
图9是本申请的一些实施例中服务器的结构示意图。该服务器1900可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(central processingunits,CPU)1922(例如,一个或一个以上处理器)和存储器1932,一个或一个以上存储应用程序1942或数据1944的存储介质1930(例如一个或一个以上海量存储设备)。其中,存储器1932和存储介质1930可以是短暂存储或持久存储。存储在存储介质1930的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器1922可以设置为与存储介质1930通信,在服务器1900上执行存储介质1930中的一系列指令操作。
服务器1900还可以包括一个或一个以上电源1926,一个或一个以上有线或无线网络接口1950,一个或一个以上输入输出接口1958,一个或一个以上键盘1956,和/或,一个或一个以上操作系统1941,例如Windows ServerTM,Mac OS XTM,UnixTM, LinuxTM,FreeBSDTM等等。
一种非临时性计算机可读存储介质,当所述存储介质中的指令由装置(服务器或者终端)的处理器执行时,使得装置能够执行图1所示的代码执行方法。
一种非临时性计算机可读存储介质,当所述存储介质中的指令由装置(服务器或者终端)的处理器执行时,使得装置能够执行一种代码执行方法,所述方法用于执行第一编程语言实现的目标源码,所述目标源码中包含以动态库形式存在的第二编程语言实现的隐私操作,所述方法包括:对所述目标源码进行编译处理,得到目标文件,所述目标文件中包含第一编程语言代码以及用于描述所述隐私操作的伪汇编代码的文本文件;根据所述目标源码中的输入符号和输出符号,构建输入符号名称列表、输入符号数值列表、以及输出符号名称列表;执行所述目标文件,以及在执行到所述目标文件中的隐私操作时,根据所述伪汇编代码、所述输入符号名称列表、所述输入符号数值列表、以及所述输出符号名称列表,生成第一参数;通过第一接口向虚拟执行器接口模块传递所述第一参数,所述虚拟执行器接口模块用于基于所述第一参数,生成第二参数,并通过第二接口向底层执行器传递所述第二参数,所述底层执行器用于基于所述第二参数,执行所述隐私操作。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。
以上所述仅为本申请的较佳实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
以上对本申请所提供的一种代码执行方法、一种代码执行装置和一种用于代码执行的装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (34)
1.一种代码执行方法,其特征在于,所述方法用于执行第一编程语言实现的目标源码,所述目标源码中包含以动态库形式存在的第二编程语言实现的隐私操作,所述方法包括:
对所述目标源码进行编译处理,得到目标文件,所述目标文件中包含第一编程语言代码以及用于描述所述隐私操作的伪汇编代码的文本文件;
根据所述目标源码中的输入符号和输出符号,构建输入符号名称列表、输入符号数值列表、以及输出符号名称列表;
执行所述目标文件,以及在执行到所述目标文件中的隐私操作时,根据所述伪汇编代码、所述输入符号名称列表、所述输入符号数值列表、以及所述输出符号名称列表,生成第一参数;
通过第一接口向虚拟执行器接口模块传递所述第一参数,所述虚拟执行器接口模块用于基于所述第一参数,生成第二参数,并通过第二接口向底层执行器传递所述第二参数,所述底层执行器用于基于所述第二参数,执行所述隐私操作;
其中,所述底层执行器为所述虚拟执行器接口模块根据所述第二参数选择确定的,所述底层执行器由第二编程语言实现,运行在第二编程语言的执行环境中。
2.根据权利要求1所述的方法,其特征在于,所述根据所述目标源码中的输入符号和输出符号,构建输入符号名称列表、输入符号数值列表、以及输出符号名称列表,包括:
基于编译过程产生的符号表,确定所述目标源码中每个符号的属性特征;
根据所述属性特征,确定所述目标源码中的输入符号和输出符号;
根据所述输入符号的名称,构建输入符号名称列表,以及根据所述输入符号的数值,构建输入符号数值列表;
根据所述输出符号的名称,构建输出符号名称列表。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
对所述目标源码中的常量进行变量化处理,得到所述常量对应的变量;
将所述变量的名称作为输入符号的名称,加入所述输入符号名称列表,以及将所述变量的数值作为输入符号的数值,加入所述输入符号数值列表。
4.根据权利要求1所述的方法,其特征在于,所述通过第一接口向虚拟执行器接口模块传递所述第一参数之后,所述方法还包括:
根据所述第一参数,建立全局符号映射表,所述全局符号映射表用于保存输入符号的信息、输出符号的信息、以及中间结果的信息。
5.根据权利要求4所述的方法,其特征在于,所述输入符号的信息包括:输入符号的名称、输入符号的形状、输入符号的数值、输入符号的类型;所述输出符号的信息包括:输出符号的名称、输出符号的形状、输出符号的数值、输出符号的类型;所述中间结果的信息包括:中间结果的名称、中间结果的形状、中间结果的数值、中间结果的类型。
6.根据权利要求4所述的方法,其特征在于,所述基于所述第一参数,生成第二参数,包括:
逐行执行所述伪汇编代码,获取当前待操作的目标输入符号、目标输出符号、以及目标操作码;
将所述目标输入符号的名称作为索引值,检索所述全局符号映射表,得到所述目标输入符号的信息,以及将所述目标输出符号的名称作为索引值,检索所述全局符号映射表,得到所述目标输出符号的信息;
将所述目标输入符号的信息、所述目标输出符号的信息、以及所述目标操作码的类型作为所述第二参数。
7.根据权利要求6所述的方法,其特征在于,所述目标操作码为根据所述伪汇编代码中的预置列所确定,所述目标输入符号包括所述目标操作码对应的操作数和/或中间结果。
8.根据权利要求6所述的方法,其特征在于,所述基于所述第二参数,执行所述隐私操作,包括:
根据所述目标输入符号的信息,对所述目标输入符号按照所述目标操作码的类型执行隐私操作,得到隐私操作结果;
将所述隐私操作结果赋值给所述目标输出符号,并通过所述第二接口将赋值后的目标输出符号返回给所述虚拟执行器接口模块。
9.根据权利要求8所述的方法,其特征在于,所述通过所述第二接口将赋值后的目标输出符号返回给所述虚拟执行器接口模块之后,所述方法还包括:
根据所述赋值后的目标输出符号,更新所述全局符号映射表。
10.根据权利要求8所述的方法,其特征在于,所述第二接口为Protobuf接口,所述Protobuf接口通过第一函数向所述底层执行器传递第二参数,以及通过第二函数向所述虚拟执行器接口模块传递所述赋值后的目标输出符号。
11.根据权利要求1至10任一所述的方法,其特征在于,所述底层执行器包括如下任意一种:基于秘密分享的执行器、基于同态加密的执行器、基于可信执行环境的执行器。
12.一种代码执行装置,其特征在于,所述装置用于执行第一编程语言实现的目标源码,所述目标源码中包含以动态库形式存在的第二编程语言实现的隐私操作,所述装置包括:
编译处理模块,用于对所述目标源码进行编译处理,得到目标文件,所述目标文件中包含第一编程语言代码以及用于描述所述隐私操作的伪汇编代码的文本文件;
符号构建模块,用于根据所述目标源码中的输入符号和输出符号,构建输入符号名称列表、输入符号数值列表、以及输出符号名称列表;
代码执行模块,用于执行所述目标文件,以及在执行到所述目标文件中的隐私操作时,根据所述伪汇编代码、所述输入符号名称列表、所述输入符号数值列表、以及所述输出符号名称列表,生成第一参数;
底层调用模块,用于通过第一接口向虚拟执行器接口模块传递所述第一参数,所述虚拟执行器接口模块用于基于所述第一参数,生成第二参数,并通过第二接口向底层执行器传递所述第二参数,所述底层执行器用于基于所述第二参数,执行所述隐私操作;
其中,所述底层执行器为所述虚拟执行器接口模块根据所述第二参数选择确定的,所述底层执行器由第二编程语言实现,运行在第二编程语言的执行环境中。
13.根据权利要求12所述的装置,其特征在于,所述符号构建模块,包括:
属性确定子模块,用于基于编译过程产生的符号表,确定所述目标源码中每个符号的属性特征;
符号确定子模块,用于根据所述属性特征,确定所述目标源码中的输入符号和输出符号;
输入符号列表构建子模块,用于根据所述输入符号的名称,构建输入符号名称列表,以及根据所述输入符号的数值,构建输入符号数值列表;
输出符号列表构建子模块,用于根据所述输出符号的名称,构建输出符号名称列表。
14.根据权利要求13所述的装置,其特征在于,所述装置还包括:
常量符号处理模块,用于对所述目标源码中的常量进行变量化处理,得到所述常量对应的变量;
常量符号添加模块,用于将所述变量的名称作为输入符号的名称,加入所述输入符号名称列表,以及将所述变量的数值作为输入符号的数值,加入所述输入符号数值列表。
15.根据权利要求12所述的装置,其特征在于,所述装置还包括:
全局符号映射模块,用于根据所述第一参数,建立全局符号映射表,所述全局符号映射表用于保存输入符号的信息、输出符号的信息、以及中间结果的信息。
16.根据权利要求15所述的装置,其特征在于,所述输入符号的信息包括:输入符号的名称、输入符号的形状、输入符号的数值、输入符号的类型;所述输出符号的信息包括:输出符号的名称、输出符号的形状、输出符号的数值、输出符号的类型;所述中间结果的信息包括:中间结果的名称、中间结果的形状、中间结果的数值、中间结果的类型。
17.根据权利要求15所述的装置,其特征在于,所述底层调用模块,包括:
目标确定子模块,用于逐行执行所述伪汇编代码,获取当前待操作的目标输入符号、目标输出符号、以及目标操作码;
目标索引子模块,用于将所述目标输入符号的名称作为索引值,检索所述全局符号映射表,得到所述目标输入符号的信息,以及将所述目标输出符号的名称作为索引值,检索所述全局符号映射表,得到所述目标输出符号的信息;
参数确定子模块,用于将所述目标输入符号的信息、所述目标输出符号的信息、以及所述目标操作码的类型作为所述第二参数。
18.根据权利要求17所述的装置,其特征在于,所述目标操作码为根据所述伪汇编代码中的预置列所确定,所述目标输入符号包括所述目标操作码对应的操作数和/或中间结果。
19.根据权利要求17所述的装置,其特征在于,所述底层调用模块,包括:
操作执行子模块,用于根据所述目标输入符号的信息,对所述目标输入符号按照所述目标操作码的类型执行隐私操作,得到隐私操作结果;
结果返回子模块,用于将所述隐私操作结果赋值给所述目标输出符号,并通过所述第二接口将赋值后的目标输出符号返回给所述虚拟执行器接口模块。
20.根据权利要求19所述的装置,其特征在于,所述装置还包括:
符号添加模块,用于根据所述赋值后的目标输出符号,更新所述全局符号映射表。
21.根据权利要求19所述的装置,其特征在于,所述第二接口为Protobuf接口,所述Protobuf接口通过第一函数向所述底层执行器传递第二参数,以及通过第二函数向所述虚拟执行器接口模块传递所述赋值后的目标输出符号。
22.根据权利要求12至21任一所述的装置,其特征在于,所述底层执行器包括如下任意一种:基于秘密分享的执行器、基于同态加密的执行器、基于可信执行环境的执行器。
23.一种用于代码执行的装置,其特征在于,所述装置用于执行第一编程语言实现的目标源码,所述目标源码中包含以动态库形式存在的第二编程语言实现的隐私操作,所述装置包括有存储器,以及至少一个程序,所述至少一个程序存储于存储器中,且经配置以由至少一个处理器执行所述至少一个程序包含用于进行以下操作的指令:
对所述目标源码进行编译处理,得到目标文件,所述目标文件中包含第一编程语言代码以及用于描述所述隐私操作的伪汇编代码的文本文件;
根据所述目标源码中的输入符号和输出符号,构建输入符号名称列表、输入符号数值列表、以及输出符号名称列表;
执行所述目标文件,以及在执行到所述目标文件中的隐私操作时,根据所述伪汇编代码、所述输入符号名称列表、所述输入符号数值列表、以及所述输出符号名称列表,生成第一参数;
通过第一接口向虚拟执行器接口模块传递所述第一参数,所述虚拟执行器接口模块用于基于所述第一参数,生成第二参数,并通过第二接口向底层执行器传递所述第二参数,所述底层执行器用于基于所述第二参数,执行所述隐私操作;
其中,所述底层执行器为所述虚拟执行器接口模块根据所述第二参数选择确定的,所述底层执行器由第二编程语言实现,运行在第二编程语言的执行环境中。
24.根据权利要求23所述的装置,其特征在于,所述根据所述目标源码中的输入符号和输出符号,构建输入符号名称列表、输入符号数值列表、以及输出符号名称列表,包括:
基于编译过程产生的符号表,确定所述目标源码中每个符号的属性特征;
根据所述属性特征,确定所述目标源码中的输入符号和输出符号;
根据所述输入符号的名称,构建输入符号名称列表,以及根据所述输入符号的数值,构建输入符号数值列表;
根据所述输出符号的名称,构建输出符号名称列表。
25.根据权利要求24所述的装置,其特征在于,所述装置还经配置以由至少一个处理器执行所述至少一个程序包含用于进行以下操作的指令:
对所述目标源码中的常量进行变量化处理,得到所述常量对应的变量;
将所述变量的名称作为输入符号的名称,加入所述输入符号名称列表,以及将所述变量的数值作为输入符号的数值,加入所述输入符号数值列表。
26.根据权利要求23所述的装置,其特征在于,所述装置还经配置以由至少一个处理器执行所述至少一个程序包含用于进行以下操作的指令:
根据所述第一参数,建立全局符号映射表,所述全局符号映射表用于保存输入符号的信息、输出符号的信息、以及中间结果的信息。
27.根据权利要求26所述的装置,其特征在于,所述输入符号的信息包括:输入符号的名称、输入符号的形状、输入符号的数值、输入符号的类型;所述输出符号的信息包括:输出符号的名称、输出符号的形状、输出符号的数值、输出符号的类型;所述中间结果的信息包括:中间结果的名称、中间结果的形状、中间结果的数值、中间结果的类型。
28.根据权利要求26所述的装置,其特征在于,所述基于所述第一参数,生成第二参数,包括:
逐行执行所述伪汇编代码,获取当前待操作的目标输入符号、目标输出符号、以及目标操作码;
将所述目标输入符号的名称作为索引值,检索所述全局符号映射表,得到所述目标输入符号的信息,以及将所述目标输出符号的名称作为索引值,检索所述全局符号映射表,得到所述目标输出符号的信息;
将所述目标输入符号的信息、所述目标输出符号的信息、以及所述目标操作码的类型作为所述第二参数。
29.根据权利要求28所述的装置,其特征在于,所述目标操作码为根据所述伪汇编代码中的预置列所确定,所述目标输入符号包括所述目标操作码对应的操作数和/或中间结果。
30.根据权利要求28所述的装置,其特征在于,所述基于所述第二参数,执行所述隐私操作,包括:
根据所述目标输入符号的信息,对所述目标输入符号按照所述目标操作码的类型执行隐私操作,得到隐私操作结果;
将所述隐私操作结果赋值给所述目标输出符号,并通过所述第二接口将赋值后的目标输出符号返回给所述虚拟执行器接口模块。
31.根据权利要求30所述的装置,其特征在于,所述装置还经配置以由至少一个处理器执行所述至少一个程序包含用于进行以下操作的指令:
根据所述赋值后的目标输出符号,更新所述全局符号映射表。
32.根据权利要求30所述的装置,其特征在于,所述第二接口为Protobuf接口,所述Protobuf接口通过第一函数向所述底层执行器传递第二参数,以及通过第二函数向所述虚拟执行器接口模块传递所述赋值后的目标输出符号。
33.根据权利要求23至32任一所述的装置,其特征在于,所述底层执行器包括如下任意一种:基于秘密分享的执行器、基于同态加密的执行器、基于可信执行环境的执行器。
34.一种机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得装置执行如权利要求1至11任一所述的代码执行方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010371144.3A CN111258590B (zh) | 2020-05-06 | 2020-05-06 | 一种代码执行方法、装置和用于代码执行的装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010371144.3A CN111258590B (zh) | 2020-05-06 | 2020-05-06 | 一种代码执行方法、装置和用于代码执行的装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111258590A CN111258590A (zh) | 2020-06-09 |
CN111258590B true CN111258590B (zh) | 2020-08-18 |
Family
ID=70948171
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010371144.3A Active CN111258590B (zh) | 2020-05-06 | 2020-05-06 | 一种代码执行方法、装置和用于代码执行的装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111258590B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116954623A (zh) * | 2023-09-19 | 2023-10-27 | 南京国睿信维软件有限公司 | 一种跨多语言的代码混合调用方法 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111736852B (zh) * | 2020-07-20 | 2020-12-01 | 华控清交信息科技(北京)有限公司 | 一种编译链接方法、装置和用于编译链接的装置 |
CN112148296B (zh) * | 2020-08-18 | 2022-03-15 | 华控清交信息科技(北京)有限公司 | 一种编译运行方法、装置和用于编译运行的装置 |
CN113076108B (zh) * | 2021-06-04 | 2021-08-20 | 华控清交信息科技(北京)有限公司 | 一种代码执行方法、装置和用于代码执行的装置 |
CN115357252B (zh) * | 2022-10-08 | 2022-12-27 | 成都数联云算科技有限公司 | 源码文件生成方法、装置、电子设备和存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150293768A1 (en) * | 2014-04-10 | 2015-10-15 | Fujitsu Limited | Compiling method and compiling apparatus |
US20160099811A1 (en) * | 2014-10-02 | 2016-04-07 | Microsoft Corporation | End-to-End Security For Hardware Running Verified Software |
CN105608391A (zh) * | 2015-12-17 | 2016-05-25 | 北京奇虎科技有限公司 | 多elf文件保护方法及系统 |
CN108809826A (zh) * | 2018-04-27 | 2018-11-13 | 广州西麦科技股份有限公司 | 一种大象数据流处理方法、装置、p4交换机及介质 |
CN109299587A (zh) * | 2018-09-11 | 2019-02-01 | 平安科技(深圳)有限公司 | 基于go语言的算法保护方法、装置、设备及存储介质 |
CN111061485A (zh) * | 2019-12-03 | 2020-04-24 | 华控清交信息科技(北京)有限公司 | 任务处理方法、编译器、调度服务器和介质 |
-
2020
- 2020-05-06 CN CN202010371144.3A patent/CN111258590B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150293768A1 (en) * | 2014-04-10 | 2015-10-15 | Fujitsu Limited | Compiling method and compiling apparatus |
US20160099811A1 (en) * | 2014-10-02 | 2016-04-07 | Microsoft Corporation | End-to-End Security For Hardware Running Verified Software |
CN105608391A (zh) * | 2015-12-17 | 2016-05-25 | 北京奇虎科技有限公司 | 多elf文件保护方法及系统 |
CN108809826A (zh) * | 2018-04-27 | 2018-11-13 | 广州西麦科技股份有限公司 | 一种大象数据流处理方法、装置、p4交换机及介质 |
CN109299587A (zh) * | 2018-09-11 | 2019-02-01 | 平安科技(深圳)有限公司 | 基于go语言的算法保护方法、装置、设备及存储介质 |
CN111061485A (zh) * | 2019-12-03 | 2020-04-24 | 华控清交信息科技(北京)有限公司 | 任务处理方法、编译器、调度服务器和介质 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116954623A (zh) * | 2023-09-19 | 2023-10-27 | 南京国睿信维软件有限公司 | 一种跨多语言的代码混合调用方法 |
CN116954623B (zh) * | 2023-09-19 | 2023-12-22 | 南京国睿信维软件有限公司 | 一种跨多语言的代码混合调用方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111258590A (zh) | 2020-06-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111258590B (zh) | 一种代码执行方法、装置和用于代码执行的装置 | |
CN111142876B (zh) | 一种编译处理方法、装置和用于编译处理的装置 | |
US10817282B2 (en) | Application configuration file generation method and apparatus, application page display method and apparatus and storage medium | |
US11210119B2 (en) | Method and device for displaying interface, electronic equipment, server, and storage medium | |
CN112187862B (zh) | 一种任务处理方法、装置和用于任务处理的装置 | |
CN113076108B (zh) | 一种代码执行方法、装置和用于代码执行的装置 | |
CN112861175B (zh) | 一种数据处理方法、装置和用于数据处理的装置 | |
CN110851108A (zh) | 电子设备操作方法、装置、电子设备及存储介质 | |
CN111736816B (zh) | 一种编译链接方法、装置和用于编译链接的装置 | |
CN113094744A (zh) | 信息处理方法、服务平台、用于信息处理的装置和多方安全计算系统 | |
CN110908629A (zh) | 电子设备操作方法、装置、电子设备和存储介质 | |
CN113139205B (zh) | 一种安全计算方法、通用计算引擎、用于安全计算的装置和安全计算系统 | |
CN111221613B (zh) | 程序调用方法及装置、存储介质 | |
CN111274556A (zh) | 代码混淆方法、装置及存储介质 | |
CN114915455B (zh) | 一种密文数据传输方法、装置和用于密文数据传输的装置 | |
CN111752644A (zh) | 接口模拟方法、装置、设备及存储介质 | |
CN113391860A (zh) | 服务请求处理方法、装置、电子设备及计算机存储介质 | |
CN107832058B (zh) | 数据处理方法及装置 | |
CN112287380B (zh) | 一种数据处理方法、装置和用于数据处理的装置 | |
CN113779501B (zh) | 一种数据处理方法、装置和用于数据处理的装置 | |
CN111736852B (zh) | 一种编译链接方法、装置和用于编译链接的装置 | |
CN112463332B (zh) | 一种数据处理方法、密文计算系统和用于数据处理的装置 | |
CN112486617A (zh) | 密文数据处理架构、方法、装置及机器可读介质 | |
CN118626323B (zh) | 处理器的测试方法、装置、设备及存储介质 | |
CN112003788B (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 |