CN111309308A - 一种对c和c++编译器加壳的方法、设备和计算机可读存储介质 - Google Patents
一种对c和c++编译器加壳的方法、设备和计算机可读存储介质 Download PDFInfo
- Publication number
- CN111309308A CN111309308A CN202010125343.6A CN202010125343A CN111309308A CN 111309308 A CN111309308 A CN 111309308A CN 202010125343 A CN202010125343 A CN 202010125343A CN 111309308 A CN111309308 A CN 111309308A
- Authority
- CN
- China
- Prior art keywords
- compiler
- compiling
- command
- program
- executed
- 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
Links
Images
Classifications
-
- 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/42—Syntactic analysis
-
- 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/43—Checking; Contextual analysis
- G06F8/436—Semantic checking
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及一种对C和C++编译器加壳的方法、设备和计算机可读存储介质。该方法包括:步骤1:通过加壳程序调用make命令,该make命令调用makefile以实时生成编译指令;步骤2:检测是否生成相应的虚拟编译器;步骤3:调用make执行编译命令;步骤4:在利用完该编译命令以后,将该编译命令真正执行;步骤5:删除所生成的相应的虚拟编译器。本发明解决了如何监控编译器,在进行语法和语义分析时知道其上下文环境和引用关系的问题,使得保证了编译脚本的原生性和减少更改脚本引发的错误,使用简单,高效,可以嫁接多种业务需要。
Description
技术领域
本发明涉及源代码安全扫描的技术领域,具体地涉及一种对C和C++编译器加壳的方法、设备和计算机可读存储介质。
背景技术
目前,随着信息技术的发展和网络在现代生活中的普遍应用,各种黑客攻击和网络安全事件层出不穷。据世界权威信息安全咨询公司Gartner发布的2018年网络信息安全事件报告中指出,70%的网络攻击来源于应用层面的攻击。因此,对应用***的安全检测和安全防护已经成为各公司和各单位信息安全防护中的重中之重。源代码的安全检测是保证应用***的安全性的重要手段,代码量巨大和人工检测容易发生错漏,以及严重依赖于检测人员的安全知识。利用程序和安全检测工具来进行代码查漏是必不可少的手段了。
代码检测工具的理论依据是根据基本的语法,语义和上下文环境分析,从而实现更高层面的控制流分析和数据流分析。编译器在语法和语义分析上具有天然的优势。因此如何利用编译器得到目标程序的语法和语义信息是首先要解决的问题。JAVA语言的编译器JDK提供有语法和语义信息的接口,但是C/C++语言的各个版本的编译器没有提供语法和语义的接口,这时对编译器进行加壳,从而得到编译时所需要的***库的依赖和第三方包的依赖以及编译中各种各样的参数等。
对C/C++语言进行语法和语义解析是加壳的应用方法之一,给编译器加壳还可以应用到其他方面,如监控编译器解析的效率,监控编译器使用哪些***资源,使得编译器在解析语言过程中暂停或中断等。
发明内容
本发明所要解决的技术问题是提供一种对C和C++编译器加壳的方法、设备和计算机可读存储介质,使得可以监控编译器,在进行语法和语义分析时知道其上下文环境和引用关系。
具体地,C/C++语言以其高效运行而著称,现在C/C++还广泛地运用于银行核心交换***,大量的单片机指令集中。C/C++***的安全性一直是信息安全人员和***运维人员的关注焦点之一,对源代码的安全漏洞分析已经是一个必不可少的工作。开发专业工具对C/C++代码进行安全漏洞分析首先要对C/C++代码进行语法和语义分析。在进行语法和语义分析的时候需要知道其上下文环境和引用关系。而监控编译器对每一个文件编译的过程则可以方便地知道这些信息。所以需要一种方法可以监控编译器,即对编译器加壳的方法。
通过本发明可以实现的技术目的不限于上文已经特别描述的内容,并且本领域技术人员将从下面的详细描述中更加清楚地理解本文中未描述的其他技术目的。
本发明解决上述技术问题的技术方案如下:
根据本公开的一方面,本发明提供一种对C和C++编译器加壳的方法,其特征在于,所述方法包括:
步骤1:通过加壳程序调用make命令,该make命令调用makefile以实时生成编译指令;
步骤2:检测是否生成相应的虚拟编译器;
步骤3:调用make执行编译命令;
步骤4:在利用完该编译命令以后,将该编译命令真正执行;
步骤5:删除所生成的相应的虚拟编译器。
可选地,在如上所述的方法中,在步骤1中,在生成编译指令之后,再调用底层的编译器来执行该编译指令。
可选地,在如上所述的方法中,在步骤2中,如果没有检测到相应的虚拟编译器,则实时生成相应的虚拟编译器,该编译虚拟器的名称和真实编译器的名称相同,该加壳程序首先在***的环境变量下面找到真实编译器,然后在再临时目录中生成相对应的脚本文件,该相对应的脚本文件具有接收到的所有的参数,然后将所有的参数传递给该加壳程序。
可选地,在如上所述的方法中,在步骤3中,在执行该编译命令时,该编译命令找到所述虚拟编译器,所述虚拟编译器将所有的命令及参数传递到加壳程序中,该加壳程序获得当前的编译命令的所有参数及上下文环境,对当前编译对象进行语法和语义处理。
可选地,在如上所述的方法中,在步骤4中,继续在JAVA中调用该编译命令,将当前执行的路径指向真正编译器所在的路径。
根据本公开的一方面,本发明提供一种对C和C++编译器加壳的设备,其特征在于,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上任一项所述的对C和C++编译器加壳的方法的步骤。
根据本公开的一方面,本发明提供一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有信息传递的实现程序,所述程序被处理器执行时实现如上任一项所述的对C和C++编译器加壳的方法的步骤。
上述技术方案仅为本发明实施例的一些部分,本领域技术人员从以下本发明的详细描述中可以导出和理解包含了本发明的技术特征的各种实施例。
本发明的技术方案对编译器完全无侵入,原编译器的内容和路径都没有做任何改变。对编译脚本完全无侵入,对编译脚本makefile或make.shell等没有做任何更改。保证了编译脚本的原生性和减少更改脚本引发的错误。这种加壳方法适应能力超强,完全能适应C/C++的几乎所有的情况。由于对编译器和脚本没有任何改动,只是做了简单的环境变量的映射。对编译执行过程进行完全的控制,编译指令进入到加壳程序,这时编译状态是暂停的,暂停的时间由技术人员控制。这时所有的上下文环境和生成的中间文件都是暂停状态。有充分的时间来分析当前目标文件的语法和语义。本发明的技术方案使用简单,高效,可以嫁接多种业务需要。只需要运行加壳程序,就可以完成编译脚本的执行,虚拟编译器的生成,编译指令和上下文环境的获取,然后执行业务,最后再让编译器真正执行。
本领域技术人员将会理解,通过本发明可以实现的效果不限于上文已经具体描述的内容,并且从以下详细说明中将更清楚地理解本发明的其他优点。
附图说明
被包括以提供对本发明的进一步理解的附图示出本发明的实施例,并且与说明书一起用于解释本发明的原理。
图1为本发明实施例提供的一种对C和C++编译器加壳的方法的流程图。
图2为本发明实施例提供的一种对C和C++编译器加壳的方法的示意图。
图3为本发明实施例提供的一种对C和C++编译器加壳的设备的示意图。
具体实施方式
现在将详细参考本发明的示例性实施例,其示例在附图中示出。下面将参考附图给出的详细描述旨在解释本发明的示例性实施例,而不是示出可以根据本发明实现的唯一实施例。以下详细描述包括具体细节以便提供对本发明的透彻理解。然而,对于本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下实践本发明。
在一些情况下,已知的结构和设备被省略或以框图形式示出,集中于结构和设备的重要特征,以免模糊本发明的概念。在整个说明书中将使用相同的附图标记来表示相同或相似的部分。
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
在本发明的描述中,需要理解的是,术语“上”、“下”、“中心”、“内”、“外”、“顶”、“底”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。指令集是指指挥机器工作的指示和命令,程序是指一系列按一定顺序排列的指令,执行程序的过程就是计算机的工作过程。语法是指描述计算机语言的语法。语义分析是指编译过程的一个逻辑阶段,语义分析的任务是对结构上正确的源程序进行上下文有关性质的审查,进行类型审查。编译器是指将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。C/C++语言是指面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
实施例1
图1示出本发明实施例提供的一种对C和C++编译器加壳的方法的流程图。本发明实施例提供一种对C和C++编译器加壳的方法,所述方法包括:步骤1:通过加壳程序调用make命令,该make命令调用makefile以实时生成编译指令;步骤2:检测是否生成相应的虚拟编译器;步骤3:调用make执行编译命令;步骤4:在利用完该编译命令以后,将该编译命令真正执行;步骤5:删除所生成的相应的虚拟编译器。可选地,在步骤1中,在生成编译指令之后,再调用底层的编译器来执行该编译指令。可选地,在步骤2中,如果没有检测到相应的虚拟编译器,则实时生成相应的虚拟编译器,该编译虚拟器的名称和真实编译器的名称相同,该加壳程序首先在***的环境变量下面找到真实编译器,然后在再临时目录中生成相对应的脚本文件,该相对应的脚本文件具有接收到的所有的参数,然后将所有的参数传递给该加壳程序。可选地,在步骤3中,在执行该编译命令时,该编译命令找到所述虚拟编译器,所述虚拟编译器将所有的命令及参数传递到加壳程序中,该加壳程序获得当前的编译命令的所有参数及上下文环境,对当前编译对象进行语法和语义处理。可选地,在步骤4中,继续在JAVA中调用该编译命令,将当前执行的路径指向真正编译器所在的路径。
根据本发明的具体实施方式,参考图2,本发明的技术方案是通过在目标机器上新建一个虚拟编译器,然后把***环境变量的路径指向该编译器,该虚拟编译器的内容只是简单的把编译的指令传递到本发明的程序中。这样程序中就得到所有的编译指令以及参数,然后就可以通过这些编译指令和参数进行语法和语义解析。解析完成后再继续运行正确的编译指令,方法是把环境变量的路径再指向原路径。本发明的加壳程序是使用JAVA语言开发的,在JAVA语言中可以直接调用脚本或直接执行当前操作***的指令,并且可以指定当前指令的环境变量,这为替换编译器的路径提供了很好的方法。
如图2所示,编译一个C/C++工程的时候通过执行make命令,调用makefile(makefile是编译工程的脚本)。首先在加壳程序里调用make命令(01),make命令会调用makefile(02),makefile实时生成编译指令(03),这时加壳程序会检测有没有相应的虚拟编译器(04),如果没有就实时生成一个虚拟编译器,这时加壳程序会执行编译指令,并指定***的环境变量到虚拟编译器的路径,编译指令(03)在执行的时候就会把所有的命令通过虚拟编译器传递给加壳程序,加壳程序这时拿到所有的执行参数和上下文关系,对其进行语法语义分析或进行其它预定的操作。在操作完成后指定***的环境变量到真实编译器的位置(05),然后对其进行真正的编译。
更具体地,本发明的方法的实际操作可以参考图2所示,该方法是通过在目标计算机上创建一个虚拟编译器,从而使所有的编译指令和上下文环境信息转移到虚拟编译器中,再传递到本发明的加壳程序中,加壳程序对这些信息加工或处理过后,再传递给真正的编译器执行。具体的步骤例如:
1、通过程序来执行命令行脚本makefile,这个makefile就是C/C++语言的编译脚本,编译器提供了make命令来执行编译,make通过调用makefile,生成具体的一条条的编译指令,然后再调用底层的编译器来执行这条编译指令。
2、在程序调用make命令之前检测有没有生成相应的虚拟编译器,如果没有就会实时生成虚拟编译器,编译虚拟器的名字和真实编译器名称一样。程序会先在***的环境变量下面找到真实编译器,例如/usr/bin下面的c、c++、xlc、cc等,这些编译器都是二进制执行文件。然后再临时目录生成相对应的脚本文件,例如c.sh、c++.sh、xlc.sh、cc.sh里面的内容就接受到所有的参数,然后把所有的参数传递给程序。
3、程序调用make执行编译命令,上一步已经生成好了虚拟编译器。在一条具体的编译命令被执行的时候,这条命令会找到虚拟编译器,虚拟编译器把所有的命令及参数传递到加壳程序中,加壳程序得到当前编译命令的所有参数及上下文环境,这时可以对当前编译对象进行语法和语义处理。
4、利用完这条编译命令以后,再让这条编译命令真正执行,方法是继续在JAVA中调用这条编译命令,把当前执行的路径指向真正编译器所在的路径,例如/usr/bin/c。
5、在所要做的工作完成以后,就可以删除掉生成的虚拟编译器,例如c.sh、c++.sh、xlc.sh等。
实施例2
根据本发明的实施例,本发明提供一种对C和C++编译器加壳的设备,如图3所示,包括:存储器10、处理器12及存储在所述存储器10上并可在所述处理器12上运行的计算机程序,所述计算机程序被所述处理器12执行时实现如上实施例1中所述的一种对C和C++编译器加壳的方法的步骤。
实施例3
根据本发明的实施例,本发明提供一种计算机可读存储介质,所述计算机可读存储介质上存储有信息传递的实现程序,所述程序被处理器执行时实现如上实施例1中所述的一种对C和C++编译器加壳的方法的步骤。
本发明的技术方案对编译器完全无侵入,原编译器的内容和路径都没有做任何改变。对编译脚本完全无侵入,对编译脚本makefile或make.shell等没有做任何更改。保证了编译脚本的原生性和减少更改脚本引发的错误。这种加壳方法适应能力超强,完全能适应C/C++的几乎所有的情况。由于对编译器和脚本没有任何改动,只是做了简单的环境变量的映射。对编译执行过程进行完全的控制,编译指令进入到加壳程序,这时编译状态是暂停的,暂停的时间由技术人员控制。这时所有的上下文环境和生成的中间文件都是暂停状态。有充分的时间来分析当前目标文件的语法和语义。使用简单,高效,可以嫁接多种业务需要。只需要运行加壳程序,就可以完成编译脚本的执行,虚拟编译器的生成,编译指令和上下文环境的获取,然后执行业务,最后再让编译器真正执行。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本申请可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现。基于这样的理解,本申请的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
如上所述,已经给出了本发明的优选实施例的详细描述,以使本领域技术人员能够实施和实践本发明。虽然已经参照示例性实施例描述了本发明,但是本领域技术人员将会理解,在不脱离所附权利要求书中描述的本发明的精神或范围的情况下,可以在本发明中进行各种修改和改变。因此,本发明不应限于在此描述的特定实施例,而应被赋予与本文公开的原理和新颖特征一致的最宽范围。
Claims (7)
1.一种对C和C++编译器加壳的方法,其特征在于,所述方法包括:
步骤1:通过加壳程序调用make命令,该make命令调用makefile以实时生成编译指令;
步骤2:检测是否生成相应的虚拟编译器;
步骤3:调用make执行编译命令;
步骤4:在利用完该编译命令以后,将该编译命令真正执行;
步骤5:删除所生成的相应的虚拟编译器。
2.根据权利要求1所述的方法,
其特征在于,在步骤1中,在生成编译指令之后,再调用底层的编译器来执行该编译指令。
3.根据权利要求1所述的方法,
其特征在于,在步骤2中,如果没有检测到相应的虚拟编译器,则实时生成相应的虚拟编译器,该编译虚拟器的名称和真实编译器的名称相同,该加壳程序首先在***的环境变量下面找到真实编译器,然后在再临时目录中生成相对应的脚本文件,该相对应的脚本文件具有接收到的所有的参数,然后将所有的参数传递给该加壳程序。
4.根据权利要求1所述的方法,
其特征在于,在步骤3中,在执行该编译命令时,该编译命令找到所述虚拟编译器,所述虚拟编译器将所有的命令及参数传递到加壳程序中,该加壳程序获得当前的编译命令的所有参数及上下文环境,对当前编译对象进行语法和语义处理。
5.根据权利要求1所述的方法,
其特征在于,在步骤4中,继续在JAVA中调用该编译命令,将当前执行的路径指向真正编译器所在的路径。
6.一种对C和C++编译器加壳的设备,其特征在于,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至5中任一项所述的对C和C++编译器加壳的方法的步骤。
7.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有信息传递的实现程序,所述程序被处理器执行时实现如权利要求1至5中任一项所述的对C和C++编译器加壳的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010125343.6A CN111309308A (zh) | 2020-02-27 | 2020-02-27 | 一种对c和c++编译器加壳的方法、设备和计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010125343.6A CN111309308A (zh) | 2020-02-27 | 2020-02-27 | 一种对c和c++编译器加壳的方法、设备和计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111309308A true CN111309308A (zh) | 2020-06-19 |
Family
ID=71145306
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010125343.6A Pending CN111309308A (zh) | 2020-02-27 | 2020-02-27 | 一种对c和c++编译器加壳的方法、设备和计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111309308A (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6973646B1 (en) * | 2000-07-21 | 2005-12-06 | International Business Machines Corporation | Method for compiling program components in a mixed static and dynamic environment |
CN101154259A (zh) * | 2007-08-27 | 2008-04-02 | 电子科技大学 | 通用自动化脱壳引擎与方法 |
CN101697135A (zh) * | 2009-10-28 | 2010-04-21 | 北京东方网力科技有限公司 | 一种编译程序的方法及装置 |
CN105094939A (zh) * | 2015-07-16 | 2015-11-25 | 南京富士通南大软件技术有限公司 | 一种基于Makefile自动编译技术实现的软件源文件静态分析方法 |
CN105164641A (zh) * | 2012-12-31 | 2015-12-16 | 微软技术许可有限责任公司 | 扩展开发环境 |
CN106648681A (zh) * | 2016-12-29 | 2017-05-10 | 南京科远自动化集团股份有限公司 | 一种可编程语言编译装载***及方法 |
-
2020
- 2020-02-27 CN CN202010125343.6A patent/CN111309308A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6973646B1 (en) * | 2000-07-21 | 2005-12-06 | International Business Machines Corporation | Method for compiling program components in a mixed static and dynamic environment |
CN101154259A (zh) * | 2007-08-27 | 2008-04-02 | 电子科技大学 | 通用自动化脱壳引擎与方法 |
CN101697135A (zh) * | 2009-10-28 | 2010-04-21 | 北京东方网力科技有限公司 | 一种编译程序的方法及装置 |
CN105164641A (zh) * | 2012-12-31 | 2015-12-16 | 微软技术许可有限责任公司 | 扩展开发环境 |
CN105094939A (zh) * | 2015-07-16 | 2015-11-25 | 南京富士通南大软件技术有限公司 | 一种基于Makefile自动编译技术实现的软件源文件静态分析方法 |
CN106648681A (zh) * | 2016-12-29 | 2017-05-10 | 南京科远自动化集团股份有限公司 | 一种可编程语言编译装载***及方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10698668B1 (en) | Custom code transformations during compilation process | |
US7032216B1 (en) | Native compilation and safe deployment of virtual machine code | |
CN111736954B (zh) | 多智能合约虚拟机实现方法、多智能合约虚拟机及*** | |
KR20010006750A (ko) | 호출의 타겟이 동일한 패키지에 속한다고 보증된 자바패키지 내의 호출을 식별하는 방법 | |
JP2000267862A (ja) | 資源の消費を最小限にするハイブリッド式ジャストインタイム・コンパイラ | |
CA2680315A1 (en) | Optimized code generation through elimination of unused virtual functions | |
CN101533454B (zh) | 编译方法 | |
CN104462943A (zh) | 业务***中非侵入式性能监控装置和方法 | |
CN107577609A (zh) | 一种基于主机端动态链接的嵌入式***动态模块调试方法 | |
CN101739280A (zh) | 用于java卡的字节码优化***和方法 | |
CN113220326B (zh) | 智能合约升级方法及区块链*** | |
CN110472411B (zh) | 一种内存溢出处理方法、装置、设备及可读存储介质 | |
CN111309308A (zh) | 一种对c和c++编译器加壳的方法、设备和计算机可读存储介质 | |
Yeung et al. | Improvements towards formalizing UML state diagrams in CSP | |
CN113220327B (zh) | 智能合约升级方法及区块链*** | |
EP1653344A1 (en) | Embedded detection objects | |
EP1136910A2 (en) | A method of compiling code in an object oriented programming language | |
CN116301836A (zh) | 一种基于国产自主可控环境的嵌入式开发*** | |
CN110096873A (zh) | 通过补丁变换的自动诱饵推导 | |
El Fallah Seghrouchni et al. | Claim and sympa: A programming environment for intelligent and mobile agents | |
WO2022035476A1 (en) | Representing asynchronous state machine in intermediate code | |
CN114020255A (zh) | 一种基于java代码跟踪型的数据采集方法 | |
EP4204960A1 (en) | Thread-local return structure for asynchronous state machine | |
CN1900905A (zh) | 测试描述语言的实现方法及其装置 | |
CN114707124B (zh) | 基于代码虚拟化的.net平台代码保护方法和*** |
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 |