CN109460237A - 代码的编译方法及装置 - Google Patents
代码的编译方法及装置 Download PDFInfo
- Publication number
- CN109460237A CN109460237A CN201811256413.0A CN201811256413A CN109460237A CN 109460237 A CN109460237 A CN 109460237A CN 201811256413 A CN201811256413 A CN 201811256413A CN 109460237 A CN109460237 A CN 109460237A
- Authority
- CN
- China
- Prior art keywords
- code
- compiled
- line
- multirow
- cpp
- 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
- 238000000034 method Methods 0.000 title claims abstract description 53
- 238000004458 analytical method Methods 0.000 claims abstract description 68
- 230000015572 biosynthetic process Effects 0.000 claims description 13
- 238000012163 sequencing technique Methods 0.000 claims description 4
- 238000012545 processing Methods 0.000 abstract description 9
- 230000008569 process Effects 0.000 description 10
- 238000003860 storage Methods 0.000 description 9
- 238000004891 communication Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 238000007493 shaping process Methods 0.000 description 4
- 230000003068 static effect Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000000712 assembly Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 230000035800 maturation Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
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/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/53—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45587—Isolation or security of virtual machine instances
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请实施例提供了一种代码的编译方法及装置,涉及数据处理技术领域。方法包括:获得Java类文件中的待编译的Java字节码;将待编译的Java字节码编译为待编译的中间表达式;根据对所述待编译的中间表达式的分析,获得分析结果;根据分析结果逐行的将待编译的中间表达式中的多行代码编译为一一对应的多行CPP代码。由于CPP代码难以被分析,故将Java字节码最终转换成多行CPP代码来运行,使得安全性得到了提升,解决了由于Java的代码非常容易的被攻击者逆向分析而导致给用户的安全性得不到保障的技术问题。
Description
技术领域
本申请涉及数据处理技术领域,具体而言,涉及一种代码的编译方法及装置。
背景技术
目前,Java作为一种广泛使用的电脑程式设计语言,拥有跨平台、物件导向、泛型程式设计等特性,其已经被广泛的应用于各种应用开发中。
Java的代码经过编译后直接发布便可运行在Java的虚拟机上。但由于Java有逻辑完整的描述文档,导致Java的代码非常容易的被攻击者逆向分析,导致给用户的安全性得不到保障。
发明内容
本申请在于提供一种代码的编译方法及装置,以有效的改善上述的缺陷。
为了实现上述目的,本申请的实施例通过如下方式实现:
第一方面,本申请实施例提供了一种代码的编译方法,所述方法包括:获得Java类文件中的待编译的Java字节码;将所述待编译的Java字节码编译为待编译的中间表达式;根据对所述待编译的中间表达式的分析,获得分析结果;根据所述分析结果逐行的将所述待编译的中间表达式中的多行代码编译为一一对应的多行CPP代码。
在第一方面的一些可选的实现方式中,所述根据所述分析结果逐行的将所述待编译的中间表达式中的多行代码编译为一一对应的多行CPP代码,包括:将所述待编译的中间表达式中的多行代码逐行的映射到预设的代码编译框架中的编译区域;根据所述分析结果逐行的编译所述编译区域中的所述多行代码,在所述代码编译框架中与所述编译区域对应的生成区域中,生成与所述多行代码一一对应的多行CPP代码。
在第一方面的一些可选的实现方式中,所述根据对所述待编译的中间表达式的分析,获得分析结果,包括:基于对所述待编译的中间表达式中每个变量的数据特征的分析,获得每个变量的分析结果;对应的,所述多行代码中每行代码包括多个变量,所述根据所述分析结果逐行的编译所述编译区域中的所述多行代码,在所述代码编译框架中与所述编译区域对应的生成区域中,生成与所述多行代码一一对应的多行CPP代码,包括:根据每个变量的所述分析结果,逐行的编译所述编译区域中的所述多行代码,使得每行代码中的每个变量均根据每个变量的所述分析结果而被编译;在所述代码编译框架中与所述编译区域对应的生成区域中,生成与所述多行代码一一对应的多行CPP代码。
在第一方面的一些可选的实现方式中,所述将所述待编译的Java字节码编译为相应的待编译的中间表达式,包括:根据所述待编译的中间表达式中每个变量的执行时间段相对于所述待编译的中间表达式中其它变量的其它执行时间段的先后顺序,生成用于为每个变量分配对应寄存器的指示指令,其中,被分配的所述寄存器能够依次执行所述中间表达式中的多个变量,使得被分配的所述寄存器的总数为满足执行所述中间表达式中所有变量的最小值;获得每个变量的所述指示指令。
在第一方面的一些可选的实现方式中,所述根据所述分析结果逐行的将所述中间表达式中的多行代码编译为一一对应的多行CPP代码之后,所述方法还包括:根据所述多行CPP代码生成库文件。
在第一方面的一些可选的实现方式中,所述根据所述分析结果逐行的将所述中间表达式中的多行代码编译为一一对应的多行CPP代码之后,所述方法还包括:将所述Java类文件中的所述待编译的Java字节码替换为索引标识,其中,所述索引标识与所述多行CPP代码关联或与所述多行CPP代码生成库文件关联。
第二方面,本申请实施例提供了一种代码的编译装置,所述装置包括:获得模块,用于获得Java类文件中的待编译的Java字节码。第一编译模块,用于将所述待编译的Java字节码编译为待编译的中间表达式。分析模块,用于根据对所述待编译的中间表达式的分析,获得分析结果。第二编译模块,用于根据所述分析结果逐行的将所述待编译的中间表达式中的多行代码编译为一一对应的多行CPP代码。
在第二方面的一些可选的实现方式中,所述第二编译模块,还用于将所述待编译的中间表达式中的多行代码逐行的映射到预设的代码编译框架中的编译区域;根据所述分析结果逐行的编译所述编译区域中的所述多行代码,在所述代码编译框架中与所述编译区域对应的生成区域中,生成与所述多行代码一一对应的多行CPP代码。
在第二方面的一些可选的实现方式中,所述装置还包括:生成模块,用于根据所述多行CPP代码生成库文件。
在第二方面的一些可选的实现方式中,所述装置还包括:索引模块,用于将所述Java类文件中的所述待编译的Java字节码替换为索引标识,其中,所述索引标识与所述多行CPP代码关联或与所述多行CPP代码生成库文件关联。
第三方面,本申请实施例提供了一种电子设备,所述电子设备包括:处理器,存储器,总线和通信模块。所述处理器、所述通信模块和存储器通过所述总线连接。所述存储器,用于存储程序。所述处理器,用于通过调用存储在所述存储器中的程序以执行第一方面或第一方面的任一可选的实现方式所述的代码的编译方法。
第四方面,本申请实施例提供了一种具有处理器可执行的非易失程序代码的计算机可读储存介质,所述程序代码使所述处理器执行第一方面或第一方面的任一可选的实现方式所述的代码的编译方法。
本申请实施例的有益效果包括:
通过将待编译的Java字节码编译为待编译的中间表达式,以及再根据待编译的述中间表达式的分析,从而可以基于分析结果逐行的将待编译的中间表达式中的多行代码编译为一一对应的多行CPP代码,由于CPP代码难以被分析,故将Java字节码最终转换成多行CPP代码来运行,使得安全性得到了提升,解决了由于Java的代码非常容易的被攻击者逆向分析而导致给用户的安全性得不到保障的技术问题。
为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本申请第一实施例提供的一种电子设备的结构框图;
图2示出了本申请第二实施例提供的一种代码的编译方法的流程图;
图3示出了本申请第二实施例提供的一种代码的编译装置的结构框图。
具体实施方式
下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有进行出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。再者,本申请中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。
第一实施例
请参阅图1,本申请实施例提供了电子设备10,该电子设备10可以包括:存储器11、通信模块12、总线13和处理器14。其中,处理器14、通信模块12和存储器11通过总线13连接。处理器14用于执行存储器11中存储的可执行模块,例如计算机程序。图1所示的电子设备10的组件和结构只是示例性的,而非限制性的,根据需要,电子设备10也可以具有其他组件和结构。
其中,存储器11可能包含高速随机存取存储器(Random Access Memory RAM),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。本实施例中,存储器11存储了执行代码的编译方法所需要的程序。
总线13可以是ISA总线、PCI总线或EISA总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图1中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
处理器14可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器14中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器14可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。
本发明实施例任意实施例揭示的流过程或定义的装置所执行的方法可以应用于处理器14中,或者由处理器14实现。处理器14在接收到执行指令后,通过总线13调用存储在存储器11中的程序后,处理器14通过总线13控制通信模块12则可以代码的加密编译方法的流程
第二实施例
本实施例提供了一种代码的编译方法,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。以下对本实施例进行详细介绍。
请参阅图2,在本实施例提供的一种代码的编译方法中,该代码的加密编译方法包括:步骤S100、步骤S200、步骤S300和步骤S400。
步骤S100:获得Java类文件中的待编译的Java字节码。
步骤S200:将所述待编译的Java字节码编译为待编译的中间表达式。
步骤S300:根据对所述待编译的中间表达式的分析,获得分析结果。
步骤S400:根据所述分析结果逐行的将所述待编译的中间表达式中的多行代码编译为一一对应的多行CPP代码。
下面将对该代码的编译方法的各流程进行详细的说明。
步骤S100:获得Java类文件中的待编译的Java字节码。
通过预设的解析器,可以对从Java类文件中获得待编译的Java字节码,该Java类文件可以为class文件。其中,获得的待编译的Java字节码可以为Java类文件中的一部分字节码,当然,处于完全的安全考虑,获得的待编译的Java字节码也可以Java类文件中的全部字节码。
需要说明的是,Dalvik虚拟机是基于Java进行运行的,那么本实施例中不仅可以针对Java字节码进行编译,其也可以针对Dalvik虚拟机的Dalvik字节码进行编译,即通过预设的解析器可以获得例如dex文件中的Dalvik字节码,当然,Dalvik字节码也可以为dex文件中的全部字节码或部分字节码。
也需要说明的是,Java字节码是基于栈的操作指令,其数据格式可以为例如:invokevirtual,而Dalvik字节码是基于寄存器的操作指令,其数据格式则可以为例如:invoke-virtual,即Java字节码的数据格式与Dalvik字节码的数据格式较为相似且可以互相转换。故在后续的处理过程中,针对Java字节码的处理过程和针对Dalvik字节码的处理过程也是比较相似的,本实施例以对Java字节码的处理为例来进行详细的说明,但针对Dalvik字节码的后续处理过程可以参照对Java字节码的处理为例来进行理解,本实施例就不做太多累述。
步骤S200:将所述待编译的Java字节码编译为待编译的中间表达式。
通过解释器中预设的编译的规则,解释器可以将待编译的Java字节码编译为相应的最初的中间表达式(Intermediate Representation,IR)。该最初的中间表达式还有需要不完善的地方,为便于后续编译的准确性,解释器还可以按照预设的优化规则对最初的中间表达式的进行优化与分析,从而获得待编译的中间表达式,而待编译的中间表达式可以为满足静态单一赋值格式(Static Single Assignment form,SSA)的中间表达式。
步骤S300:根据对所述待编译的中间表达式的分析,获得分析结果。
获得待编译的中间表达式是由多个变量构成的,而变量是构成中间表达式的最小单位,例如,变量是待编译的中间表达式中的jvm或者dalvik指令集合所能操作的最小数据单位。那么,为便于准确的编译,可以对待编译的中间表达式的多个变量中的每个变量进行分析。
可选地,可以对待编译的中间表达式中每个变量的数据特征进行分析,获得每个变量的分析结果,即获得每个变量的分析结果可以表面该每个变量是(byte/Boolean/short/int/long)整形或者是(double/float)浮点型,亦或每个变量的(List/Map/Array)对象类型。例如,invoke-virtual指令要求其第一个变量是“object(对象)”,而如果该第一个变量的内容是“int(整形)”,就无法通过jvm/dalvik虚拟机的类型校验。也例如,dalvik指令并没有设计为一个对象设置为null的操作指令,而是和整形设置为0共用了一条指令“const”,后续在处理时,就必须区分出变量的对象还是整形,否则会导致编译出的CPP代码无法运行。
步骤S400:根据所述分析结果逐行的将所述待编译的中间表达式中的多行代码编译为一一对应的多行CPP代码。
待编译的中间表达式可以为由多行代码构成,而多行代码中每行代码又可以包括多个变量。那么获得每个变量的分析结果后,就可以基于每个变量的分析结果来对待编译的中间表达式中的多行代码进行编译。
可选地,为保证编译的准确性,预先设置了代码编译框架。在该代码编译框架中,该代码编译框架具有一个编译区域和与该编译区域对应的生成区域。在该待编译的中间表达式编译的过程中,就可以调用该预设的代码编译框架,并将该待编译的中间表达式中的多行代码逐行的映射到该预设的代码编译框架中的编译区域。根据每个变量的分析结果就可以逐行的编译编译区域中的该多行代码,相应的,在该代码编译框架中与编译区域对应的生成区域中,就可以生成与所述多行代码一一对应的多行CPP代码。
如下表1所示,下表1以Dalvik字节码为例示出了代码编译框架的示意图:
表1
在表1中,IR所在的一列区域为编译区域,待编译的中间表达式的多行代码则逐行的映射到该编译区域中。JNI所在的一列区域为生成区域,与待编译的中间表达式的每行代码对应的每行CPP代码则对应的生成在该生成区域中。
作为本实施例中,一种可选地的实施方式,为提高安全性,获得多行CPP代码后,还可以根据多行CPP代码生成安全性更强的库文件,其中,库文件可以为动态库文件、静态库文件、汇编文件或中间表达式文件等。其中,可以采用带有保护功能的编译器,例如obfuscator-llvm,以保证生成库文件的安全性。
也作为本实施例中,一种可选地的实施方式,为提高安全性,获得多行CPP代码后,还可以将原本的该Java类文件中的该待编译的Java字节码替换为索引标识,其中,该索引标识可以为函数标记为native,与获得的该多行CPP代码关联或与前述中多行CPP代码生成库文件关联,以便后续jvm/dalvik虚拟机能够根据该索引标识找到并运行该对应的多行CPP和库文件。
也作为本实施例中,一种可选地的实施方式,为提高生成多行CPP代码或库文件的运行效率,使得多行CPP代码或库文件在运行不太占用内存,故在步骤S200之后还可以包括:
可以根据对于待编译的中间表达式中每个变量进行分析,以获得该待编译的中间表达式中每个变量的执行时间段。基于待编译的中间表达式中每个变量的执行时间段相对于所述待编译的中间表达式中其它变量的其它执行时间段的先后顺序,就可以生成用于为每个变量分配对应寄存器的指示指令。其中,被分配的所述寄存器能够依次执行中间表达式中的多个变量,使得被分配的寄存器的总数为满足执行中间表达式中所有变量的最小值。进而获得每个变量的指示指令,使得后续生成的多行CPP代码或库文件在运行时,利用每个变量的指示指令来分配寄存器使得被分配的寄存器数量最小。
例如,变量A的执行时间段是A1-A2、变量B的执行时间段是A1-A3、而变量C的执行时间段是A2-A3。变量A、变量B和变量C的执行时间段分析,能够获知变量A、变量C和变量B的执行时间段是重复,以及获知变量A和变量C的执行时间段是具有先后顺序的。那么,可以为变量A和变量C分配同一寄存器A,以及为变量B分配另一寄存器B,使得变量B被寄存器B单独执行,而变量A和变量C则被寄存器A依次执行。
第三实施例
请参阅图3,本申请实施例提供了一种代码的编译装置100,该代码的编译装置100应用于电子设备,该代码的编译装置100包括:
获得模块110,用于获得Java类文件中的待编译的Java字节码。
第一编译模块120,用于将所述待编译的Java字节码编译为待编译的中间表达式。
分析模块130,用于根据对所述待编译的中间表达式的分析,获得分析结果。
第二编译模块140,用于根据所述分析结果逐行的将所述待编译的中间表达式中的多行代码编译为一一对应的多行CPP代码。
生成模块150,用于根据所述多行CPP代码生成库文件。
索引模块160,用于将所述Java类文件中的所述待编译的Java字节码替换为索引标识,其中,所述索引标识与所述多行CPP代码关联或与所述多行CPP代码生成库文件关联。
其中,所述第二编译模块130,还用于将所述待编译的中间表达式中的多行代码逐行的映射到预设的代码编译框架中的编译区域;根据所述分析结果逐行的编译所述编译区域中的所述多行代码,在所述代码编译框架中与所述编译区域对应的生成区域中,生成与所述多行代码一一对应的多行CPP代码。
需要说明的是,由于所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
第四实施例
本申请实施例还提供了一种处理器可执行的非易失程序代码的计算机可读储存介质,该计算机可读存储介质上存储有程序代码,该程序代码被处理器运行时执行上述任一实施例代码的编译方法的步骤。
具体地,该存储介质能够为通用的存储介质,如移动磁盘、硬盘等,该存储介质上的程序代码被运行时,能够执行上述施例代码的编译方法,从而解决了由于Java的代码非常容易的被攻击者逆向分析而导致给用户的安全性得不到保障的技术问题。
本申请实施例所提供的代码的编译方法的程序代码产品,包括存储了程序代码的计算机可读存储介质,程序代码包括的指令可用于执行前面方法实施例中的方法,具体实现可参见方法实施例,在此不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
综上所述,本申请实施例提供了一种代码的编译方法及装置。方法包括:获得Java类文件中的待编译的Java字节码;将待编译的Java字节码编译为待编译的中间表达式;根据对所述待编译的中间表达式的分析,获得分析结果;根据分析结果逐行的将待编译的中间表达式中的多行代码编译为一一对应的多行CPP代码。
通过将待编译的Java字节码编译为待编译的中间表达式,以及再根据待编译的述中间表达式的分析,从而可以基于分析结果逐行的将待编译的中间表达式中的多行代码编译为一一对应的多行CPP代码,由于CPP代码难以被分析,故将Java字节码最终转换成多行CPP代码来运行,使得安全性得到了提升,解决了由于Java的代码非常容易的被攻击者逆向分析而导致给用户的安全性得不到保障的技术问题。
以上仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
以上,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (10)
1.一种代码的编译方法,其特征在于,所述方法包括:
获得Java类文件中的待编译的Java字节码;
将所述待编译的Java字节码编译为待编译的中间表达式;
根据对所述待编译的中间表达式的分析,获得分析结果;
根据所述分析结果逐行的将所述待编译的中间表达式中的多行代码编译为一一对应的多行CPP代码。
2.根据权利要求1所述的代码的编译方法,其特征在于,所述根据所述分析结果逐行的将所述待编译的中间表达式中的多行代码编译为一一对应的多行CPP代码,包括:
将所述待编译的中间表达式中的多行代码逐行的映射到预设的代码编译框架中的编译区域;
根据所述分析结果逐行的编译所述编译区域中的所述多行代码,在所述代码编译框架中与所述编译区域对应的生成区域中,生成与所述多行代码一一对应的多行CPP代码。
3.根据权利要求2所述的代码的编译方法,其特征在于,所述根据对所述待编译的中间表达式的分析,获得分析结果,包括:
基于对所述待编译的中间表达式中每个变量的数据特征的分析,获得每个变量的分析结果;
对应的,所述多行代码中每行代码包括多个变量,所述根据所述分析结果逐行的编译所述编译区域中的所述多行代码,在所述代码编译框架中与所述编译区域对应的生成区域中,生成与所述多行代码一一对应的多行CPP代码,包括:
根据每个变量的所述分析结果,逐行的编译所述编译区域中的所述多行代码,使得每行代码中的每个变量均根据每个变量的所述分析结果而被编译;
在所述代码编译框架中与所述编译区域对应的生成区域中,生成与所述多行代码一一对应的多行CPP代码。
4.根据权利要求1-3任一权项所述的代码的编译方法,其特征在于,所述将所述待编译的Java字节码编译为相应的待编译的中间表达式之后,所述方法还包括:
根据所述待编译的中间表达式中每个变量的执行时间段相对于所述待编译的中间表达式中其它变量的其它执行时间段的先后顺序,生成用于为每个变量分配对应寄存器的指示指令,其中,被分配的所述寄存器能够依次执行所述中间表达式中的多个变量,使得被分配的所述寄存器的总数为满足执行所述中间表达式中所有变量的最小值;
获得每个变量的所述指示指令。
5.根据权利要求1-3任一权项所述的代码的编译方法,其特征在于,所述根据所述分析结果逐行的将所述中间表达式中的多行代码编译为一一对应的多行CPP代码之后,所述方法还包括:
根据所述多行CPP代码生成库文件。
6.根据权利要求1-3任一权项所述的代码的编译方法,其特征在于,所述根据所述分析结果逐行的将所述中间表达式中的多行代码编译为一一对应的多行CPP代码之后,所述方法还包括:
将所述Java类文件中的所述待编译的Java字节码替换为索引标识,其中,所述索引标识与所述多行CPP代码关联或与所述多行CPP代码生成库文件关联。
7.一种代码的编译装置,其特征在于,所述装置包括:
获得模块,用于获得Java类文件中的待编译的Java字节码;
第一编译模块,用于将所述待编译的Java字节码编译为待编译的中间表达式;
分析模块,用于根据对所述待编译的中间表达式的分析,获得分析结果;
第二编译模块,用于根据所述分析结果逐行的将所述待编译的中间表达式中的多行代码编译为一一对应的多行CPP代码。
8.根据权利要求7所述的代码的编译装置,其特征在于,
所述第二编译模块,还用于将所述待编译的中间表达式中的多行代码逐行的映射到预设的代码编译框架中的编译区域;根据所述分析结果逐行的编译所述编译区域中的所述多行代码,在所述代码编译框架中与所述编译区域对应的生成区域中,生成与所述多行代码一一对应的多行CPP代码。
9.根据权利要求7或8所述的代码的编译装置,其特征在于,所述装置还包括:
生成模块,用于根据所述多行CPP代码生成库文件。
10.根据权利要求7或8所述的代码的编译装置,其特征在于,所述装置还包括:
索引模块,用于将所述Java类文件中的所述待编译的Java字节码替换为索引标识,其中,所述索引标识与所述多行CPP代码关联或与所述多行CPP代码生成库文件关联。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811256413.0A CN109460237A (zh) | 2018-10-25 | 2018-10-25 | 代码的编译方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811256413.0A CN109460237A (zh) | 2018-10-25 | 2018-10-25 | 代码的编译方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109460237A true CN109460237A (zh) | 2019-03-12 |
Family
ID=65608496
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811256413.0A Pending CN109460237A (zh) | 2018-10-25 | 2018-10-25 | 代码的编译方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109460237A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112114818A (zh) * | 2020-09-28 | 2020-12-22 | 建信金融科技有限责任公司 | 表达式的java编译方法和装置 |
CN112558984A (zh) * | 2020-12-29 | 2021-03-26 | Oppo广东移动通信有限公司 | 代码编译的方法、装置、电子设备以及服务器 |
CN112685049A (zh) * | 2021-01-22 | 2021-04-20 | 大连高德瑞信科技有限公司 | 一种java字节码编译方法 |
CN113836495A (zh) * | 2021-09-25 | 2021-12-24 | 上海蛮犀科技有限公司 | 一种将Java代码等价转换成C++代码的方法 |
TWI777598B (zh) * | 2021-06-04 | 2022-09-11 | 逢甲大學 | 程式保護系統 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105743955A (zh) * | 2014-12-11 | 2016-07-06 | 中国科学院声学研究所 | 一种扩展JavaScript对象方法 |
CN107423067A (zh) * | 2017-07-28 | 2017-12-01 | 山东超越数控电子有限公司 | 一种Java应用与非JNI规范二进制文件相互调用的方法 |
-
2018
- 2018-10-25 CN CN201811256413.0A patent/CN109460237A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105743955A (zh) * | 2014-12-11 | 2016-07-06 | 中国科学院声学研究所 | 一种扩展JavaScript对象方法 |
CN107423067A (zh) * | 2017-07-28 | 2017-12-01 | 山东超越数控电子有限公司 | 一种Java应用与非JNI规范二进制文件相互调用的方法 |
Non-Patent Citations (1)
Title |
---|
赵贝贝: "基于多重指令虚拟的Android应用程序保护方法的研究和实现", 《CNKI》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112114818A (zh) * | 2020-09-28 | 2020-12-22 | 建信金融科技有限责任公司 | 表达式的java编译方法和装置 |
CN112114818B (zh) * | 2020-09-28 | 2023-06-20 | 建信人寿保险股份有限公司 | 表达式的java编译方法和装置 |
CN112558984A (zh) * | 2020-12-29 | 2021-03-26 | Oppo广东移动通信有限公司 | 代码编译的方法、装置、电子设备以及服务器 |
CN112685049A (zh) * | 2021-01-22 | 2021-04-20 | 大连高德瑞信科技有限公司 | 一种java字节码编译方法 |
CN112685049B (zh) * | 2021-01-22 | 2024-02-13 | 大连高德瑞信科技有限公司 | 一种java字节码编译方法 |
TWI777598B (zh) * | 2021-06-04 | 2022-09-11 | 逢甲大學 | 程式保護系統 |
CN113836495A (zh) * | 2021-09-25 | 2021-12-24 | 上海蛮犀科技有限公司 | 一种将Java代码等价转换成C++代码的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109460237A (zh) | 代码的编译方法及装置 | |
CN110096338B (zh) | 智能合约执行方法、装置、设备及介质 | |
CN109976761B (zh) | 软件开发工具包的生成方法、装置及终端设备 | |
US11036614B1 (en) | Data control-oriented smart contract static analysis method and system | |
JP7201078B2 (ja) | データ引数を動的に識別し、ソースコードを計装するためのシステムと方法 | |
US10521205B2 (en) | Hostable compiler utilizing type information from a host application | |
US20150186165A1 (en) | Emulating pointers | |
US20130007712A1 (en) | Debugging in a multiple address space environment | |
CN104965687B (zh) | 基于指令集生成的大数据处理方法及装置 | |
US8578352B1 (en) | Optimizing object oriented programs using limited customization | |
Ørbæk | Can you trust your data | |
US8769498B2 (en) | Warning of register and storage area assignment errors | |
US8990515B2 (en) | Aliasing buffers | |
CN101882190B (zh) | 字节码中间表示程序的分模块形式化验证方法 | |
JP3049814B2 (ja) | マイクロコンピュータの言語処理装置 | |
KR20170028093A (ko) | 쉐이더 프로그램을 생성하는 방법 및 장치 | |
US7581213B2 (en) | Allocating automatic variables to different memory banks | |
CN114443042A (zh) | 基于规则引擎的服务编排执行方法及相关设备 | |
Gorgovan et al. | Balancing performance and productivity for the development of dynamic binary instrumentation tools: A case study on Arm systems | |
US11662989B2 (en) | Pointer alignment computation in program code according to code pattern analyses | |
CN109783134A (zh) | 前端页面配置方法、装置及电子设备 | |
CN104281519A (zh) | 一种程序的错误检测方法及设备 | |
Albert et al. | Quantified abstract configurations of distributed systems | |
US20210279044A1 (en) | Performance optimization of class instance comparisons | |
Feng et al. | Eliminating object reference checks by escape analysis on real-time Java virtual machine |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190312 |
|
RJ01 | Rejection of invention patent application after publication |