CN116521182A - 一种反编译方法、工具、可读存储介质及程序产品 - Google Patents
一种反编译方法、工具、可读存储介质及程序产品 Download PDFInfo
- Publication number
- CN116521182A CN116521182A CN202310469848.8A CN202310469848A CN116521182A CN 116521182 A CN116521182 A CN 116521182A CN 202310469848 A CN202310469848 A CN 202310469848A CN 116521182 A CN116521182 A CN 116521182A
- Authority
- CN
- China
- Prior art keywords
- decompilation
- syntax tree
- abstract syntax
- kotlen
- steps
- 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 74
- 238000004590 computer program Methods 0.000 claims description 11
- 230000008569 process Effects 0.000 claims description 11
- 238000010276 construction Methods 0.000 claims description 5
- 230000006870 function Effects 0.000 description 20
- 238000010586 diagram Methods 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000006467 substitution reaction 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/53—Decompilation; Disassembly
-
- 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)
- Devices For Executing Special Programs (AREA)
Abstract
本发明属于计算机技术领域,特别涉及一种反编译方法、工具、可读存储介质和程序产品,其中,反编译方法包括以下步骤:获取目标字节码文件;将字节码文件解析为指令列表,并按照预设的方式识别和处理字节码文件的Kotlin特性;根据指令列表构建抽象语法树;将抽象语法树转换成Kotlin源代码。本发明提供的反编译方法对于Kotlin的特性支持更加完善,可以正确地反编译Kotlin程序中的各种语法结构,且反编译的速度更快,生成的代码更加清晰易懂。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种反编译方法、工具、可读存储介质及程序产品。
背景技术
Kotlin是一种基于Java虚拟机的编程语言,它具有许多优秀的特性,例如:可空类型、扩展函数、数据类、高阶函数等。由于Kotlin编译后的字节码与Java编译后的字节码在组织方式上有所不同,因此Kotlin程序的反编译比Java程序更加困难。目前已有一些Kotlin反编译工具,但它们的反编译效果并不理想,仅能够反编译为Java代码,无法支持Kotlin内的高级特性,在包含这些特性时,现有的反编译工具无法工作,无法得到正确的反编译结果。因此需要一种更加高效、完善的Kotlin反编译工具。
发明内容
有鉴于此,本发明实施例提供了一种反编译方法、工具、可读存储介质及程序产品,用以解决传统Kotlin反编译工具无法支持Kotlin内的高级特性,以及反编译速度慢、准确性差的技术问题。
第一方面,本发明实施例提供一种反编译方法,包括以下步骤:
获取目标字节码文件;
将所述字节码文件解析为指令列表,并按照,并按照预设的方式识别和处理所述字节码文件的Kotlin特性识别和处理所述字节码文件的Kotlin特性;
根据所述指令列表构建抽象语法树;
将所述抽象语法树转换成Kotlin源代码。
优选地,将所述字节码文件解析为指令列表包括以下步骤:
读取所述字节码文件;
将所述字节码文件解析成指令流;
将所述指令流中的每个指令封装成指令对象;
将所述指令对象整合成所述指令列表。
优选地,将所述字节码文件解析成指令流的过程中,根据Kotlin语法规则对所述字节码文件进行处理,以正确地识别和处理Kotlin特性。
优选地,根据所述指令列表构建抽象语法树包括以下步骤:
读取所述指令列表;
根据所述指令列表生成所述抽象语法树中的节点,并将所述节点连接以形成所述抽象语法树。
优选地,形成所述抽象语法树之后,还包括以下步骤:
通过合并相邻节点、优化变量声明顺序对所述抽象语法树进行优化。
优选地,将所述抽象语法树转换成Kotlin源代码包括以下步骤:
判断所述抽象语法树是否可以直接生成Kotlin源代码,若可以,则遍历所述抽象语法树,将所述抽象语法树转换为Kotlin源代码,若不可以,则将所述抽象语法树生成JAVA源代码,然后按照预设的分析逻辑对所述JAVA源代码进行分析,再将所述JAVA源代码转换为Kotlin源代码。
第二方面,本发明实施例提供一种反编译工具,包括:
接收模块:用于获取目标字节码文件;
字节码解析模块:用于将所述字节码文件解析为指令列表;
抽象语法树构建模块:用于根据所述指令列表构建抽象语法树;
反编译模块:用于将所述抽象语法树转换成Kotlin源代码。
优选地,还包括代码模块,所述代码模块用于将所述反编译模块生成的Kotlin源代码输出到目标文件中。
第三方面,本发明实施例提供一种可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被执行时实现如上述方法的步骤。
第四方面,本发明实施例提供一种程序产品,其上包括计算机程序指令,所述计算机程序指令被执行时实现如上述方法的步骤。
与现有技术相比,本发明所提供的一种反编译方法,具有如下的有益效果:
本发明实施例提供反编译方法包括以下步骤:获取目标字节码文件;将所述字节码文件解析为指令列表,并按照,并按照预设的方式识别和处理所述字节码文件的Kotlin特性识别和处理所述字节码文件的Kotlin特性;根据所述指令列表构建抽象语法树;将所述抽象语法树转换成Kotlin源代码。可以理解地,当前市场上已有的反编译工具虽然可以将Kotlin程序反编译成Java源代码,但反编译结果必定存在语法错误,并且无法识别Kotlin的高级特性,对于需要研究相关代码的人员来说,极大影响了他们的工作效率,并且也无法得到正确的代码。此外目前的Kotlin反编译工具,其反编译速度较慢,同时包含有在反编译过程中程序卡死或导致操作系统卡死的情况,进一步增加了相应的成本。而在本发明提供的反编译方法中,通过在对字节码的解析步骤添加Kotlin特性识别的流程,使得反编译方法可好地支持更多的Kotlin高级特性,例如:可空类型、扩展函数、数据类、高阶函数等,进而提高了反编译的效率和准确性。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,这些均在本发明的保护范围内。
图1为本发明第一实施例提供的反编译方法的流程示意图。
图2为本发明第一实施例提供的反编译方法中得到指令列表的流程示意图。
图3为本发明实施例提供的抽象语法树中的节点示意图。
图4-12为本发明实施例提供的具体示例的代码示意图
图13为本发明第二实施例提供的反编译工具的结构示意图。
图14为本发明第四实施例提供的程序产品的结构示意图。
图15为本发明第五实施例提供的电子设备的而结构示意图。
附图标号说明:
1、反编译方法;2、反编译工具;3、程序产品;4、电子设备;
20、接收模块;21、字节码解析模块;22、抽象语法树构建模块;23、反编译模块;30、计算机程序指令;40、处理器;41、存储器;42、总线;43、通信接口。
具体实施方式
为了使本发明的目的,技术方案及优点更加清楚明白,以下结合附图及实施实例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
请参见图1,本发明第一实施例提供了一种反编译方法1,用于对Kotlin程序进行反编译,包括以下步骤:
获取目标字节码文件;
将字节码文件解析为指令列表,并按照预设的方式识别和处理字节码文件的Kotlin特性;
根据指令列表构建抽象语法树;
将抽象语法树转换成Kotlin源代码。
可以理解地,当前市场上已有的反编译工具虽然可以将Kotlin程序反编译成Java源代码,但由于Kotlin拥有特殊的语法,这些语法是Java所不支持的,因此使用Java的反编译工具去反编译Kotlin,遇到不支持的语法特性,就会产生错误,即反编译结果必定存在语法错误,且无法识别Kotlin的高级特性,例如:
在Java侧可以使用以下代码来开启子线程:
此时将产生的字节码包含了Thread/Runnable,以及run方法。
而Kotlin使用以下代码来开启子线程:
thread{
……
}
此时产生的字节码包含thread函数调用以及一个lambda表达式。而这种尾闭包形式的lambda表达式是不被Java所支持的,因此反编译出来,只能得到thread函数调用,而会丢掉后面的lambda表达式。
上述示例中,如果将thread看作“普通的函数调用”,那么现有的反编译工具是可以正确反编译的,但是现有的工具无法对后面的lambda表达式进行反编译。因此对于需要研究相关代码的人员来说,这类问题极大地影响了他们的工作效率,并且也无法得到正确的代码。此外目前的Kotlin反编译工具,其反编译速度较慢,同时包含有在反编译过程中程序卡死或导致操作系统卡死的情况,进一步增加了相应的成本。而在本发明提供的反编译方法中,通过在对字节码的解析步骤添加Kotlin特性识别的流程,使得反编译方法可好地支持更多的Kotlin高级特性,例如:可空类型、扩展函数、数据类、高阶函数等,进而提高了反编译的效率和准确性。具体地,Kotlin高级特性指的是仅在Kotlin中支持而不被Java所支持的特性,例如:
1、流式写法:list.filter{it%2==0}
2、Lambda写法:fun action(callback:()->Unit){……}action{……}
3、特殊类型写法:
data class
enum class
sealed class
由于这些特性在Java中并不存在,因此目前的Java反编译工具无法理解这些代码,也就无法实现反编译。
其中Lambda写法尤为复杂,这里只是最简单的代码示例,真实场景下,将会包含3层以上的代码嵌套。
请参阅图2,在一些实施例中,将字节码文件解析为指令列表包括以下步骤:
读取字节码文件,首先需要读取Kotlin程序编译后的字节码文件,字节码文件通常是以.class文件的形式存在;
将字节码文件解析成指令流,示例性地,节码解析会将字节码文件中的每个字节解析成相应的指令,如加载常量、操作栈、方法调用等等,并将这些指令构成指令流;
将指令流中的每个指令封装成指令对象;
将指令对象整合成指令列表。示例性地,字节码文件被解析后的指令流中的每个指令会被封装成一个包含指令类型、参数等信息的指令对象,并件这些指令对象保存到指令列表中以便后续的抽象语法树的构建和反编译操作。
可以理解地,将字节码文件解析为指令列表是为后续操作提供数据基础。
优选地,将字节码文件解析成指令流的过程中,根据Kotlin语法规则对字节码文件进行处理,以正确地识别和处理Kotlin特性。
在一些实施例中,根据指令列表构建抽象语法树包括以下步骤:
读取指令列表,该指令列表包含了Kotlin程序编译后的所有指令信息;
根据指令列表生成抽象语法树中的节点,具体地,根据指令列表中指令的类型和参数等信息,来生成相应的节点,例如:表达式节点、控制流节点、变量声明节点等,示例性地,请参阅图3;
将节点连接以形成抽象语法树,具体地,节点之间的连接关系由指令的执行流程和语法规则决定,例如控制流节点之间的连接、表达式节点和变量节点之间的连接等等。
优选地,形成抽象语法树之后,还包括以下步骤:
通过合并相邻节点、优化变量声明顺序对抽象语法树进行优化。具体地,优化内容包括合并相邻的表达式节点,优化变量声明顺序等等,以便更好地反映Kotlin程序的结构和意义。
在一些实施例中,将抽象语法树转换成Kotlin源代码包括以下步骤:
判断抽象语法树是否可以直接生成Kotlin源代码,若可以,则遍历抽象语法树,将抽象语法树转换为Kotlin源代码,若不可以,则将抽象语法树生成JAVA源代码,然后按照预设的分析逻辑对JAVA源代码进行分析,再将JAVA源代码转换为Kotlin源代码。
应理解,此步骤中会根据抽象语法树节点的类型生成相应的代码,例如,对于一个函数调用节点,该模块会生成一个函数调用表达式。具体地,当抽象语法树可以直接生成Kotlin源代码时,对抽象语法树进行遍历。示例性地,根据抽象语法树中的节点类型生成对应的Kotlin源代码,例如:表达式、控制流、函数声明等。当当抽象语法树无法直接生成Kotlin源代码时,则生成JAVA源代码做进一步分析,以此来识别是否是Korlin特有的高阶函数,如果是高阶函数,则重新计算相关变量的生命周期,变量对函数的落入方式,以及函数本身用作代码的高阶函数表达方式。
示例性地,目前有如图4述Kotlin代码,且该代码使用了Kotlin的高级特性,尾闭包形态的lambda表达式,并辅以一个调用者函数。
上述代码在编译后,生成class(字节码)文件,将该class文件予以取出作为需要被反编译的文件。
读入该class文件,并按照字节码的规则整理成可读的字节码文件,即解析字节码,这个步骤得到的内容如下:
对于现有的反编译工具而言,有了可读字节码后,即直接进行从字节码到Java代码的解析,并且在遇到Java不支持的特性处,即告出错,现有工具的反编译效果如图5所示,在方法内的compiled code即表示了这部分代码无法被反编译。
在本发明内,将对字节码进行识别Kotlin特性的操作,在本案例中,可以被识别到的Kotlin特性如图6至图8所示。在识别到Kotlin的高级特性后,需要将这些特性整理出来,生成指令列表,本例中生成的指令列表如图9所示;
这部分指令,是Kotlin特有的,它的处理方式与Java不同,也就是说,如果识别到的特性,是Java和Kotlin通用的,那么按照现有的反编译工具的逻辑继续反编译,而如果识别到的特性是Kotlin特有的,那么就需要按下述的针对Kotlin的特殊处理来进行。
为Kotlin的指令列表,生成AST节点,生成的节点是树结构,其形式类如图10所示;
此处仅是一个简易表达,实际的生成AST节点,需要专门的算法以支持从Kotlin指令列表到AST的转换,其代码量是巨大的。
在生成了AST之后,还需要对AST进行优化,使其能更加符合Kotlin的语法习惯,在这个场景内,如果不进行AST优化,则最终生成的代码如图11所示;
这份代码虽然能正常编译和执行,但是却丢失了Kotlin语法特性中的便捷和优雅。
因此我们需要在将AST构造成代码之前,对AST进行优化,使其更加符合Kotlin的语法习惯,并避免像上图那样,生成一些并非我们需要的代码。
在实现优化AST之后,就可以遍历AST,并将读取到的AST节点生成Kotlin代码。遍历AST即是说,按上面的图内的AST,按顺序读取它的所有节点,读到的节点即可按规则生成Kotlin代码,最终实现的反编译效果如图12所示;
可以看到,目前的反编译结果已经和原始代码非常接近,也是开发者可以正确读取并理解的代码。
最后,由于整个反编译过程在内存中进行,整个进行过程对外界不可见,因此要获取最终的反编译结果,就必须把内存中的代码输出到文件中,即将代码保存到文件中。
可以理解地,现有工具,采用的方法主要是“尝试”,通过内置多种反编译规则,在遇到无法被反编译的内容时,通过规则去进行多种尝试。有部分的反编译算法速度是相当慢的,也有部分算法对内存有相当高的要求,因此会产生反编译缓慢,或者在反编译过程中因内存耗尽导致计算机卡死。
本实施例中采用的方案,无需尝试,直接通过分析和处理Kotlin编译后的字节码,找出Kotlin的高级语法部分,并在反编译方面予以支持,这部分的算法不需要经过多种尝试,也不会占用过多的内存,相比于传统编译速度更快,准确度更高,同时也避免了在反编译过程中因内存耗尽导致计算机卡死的情况出现。
请参阅图13,本发明的第二实施例还提供一种反编译工具2,用于实现上述的反编译方法,反编译工具包括:
接收模块20:用于获取目标字节码文件;
字节码解析模块21:用于将字节码文件解析为指令列表;
抽象语法树构建模块22:用于根据指令列表构建抽象语法树;
反编译模块23:用于将抽象语法树转换成Kotlin源代码。
优选地,反编译工具还包括代码模块,代码模块用于将反编译模块生成的Kotlin源代码输出到目标文件中。
应当注意,尽管在上文详细描述中提及了用于执行流程的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
此外,尽管在附图中以特定顺序描述了本公开中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、移动终端,或者网络设备等)执行根据本公开实施方式的方法。
本发明第三实施例还提供一种可读存储介质,其上存储有计算机程序指令,计算机程序指令被执行时实现如上述方法的步骤。
在一些可能的实施例中,本公开的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在终端设备上运行时,程序代码用于使终端设备执行本说明书上述“反编译方法”部分中描述的根据本公开各种示例性实施方式的步骤。
请参阅图14,本发明第四实施例还提供一种程序产品3,其上包括计算机程序指令30,计算机程序指令被执行时实现如上述方法的步骤。
请参阅图15,本发明第五实施例还提供了一种电子设备4,具体的,该电子设备4包括处理器40和存储器41;存储器41上存储有计算机程序,计算机程序在被处理器运行时执行如上实施方式的任一项的方法。
进一步地,处理器40、通信接口43和存储器41通过总线42连接;处理器40用于执行存储器41中存储的可执行模块,例如计算机程序。
其中,存储器41可能包含高速随机存取存储器(RAM,Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口43(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。
总线42可以是ISA总线、PCI总线或EISA总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
其中,存储器41用于存储程序,处理器40在接收到执行指令后,执行程序,前述本发明实施例任一实施例揭示的流过程定义的装置所执行的方法可以应用于处理器40中,或者由处理器40实现。
处理器40可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器40中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器40可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DigitalSignalProcessing,简称DSP)、专用集成电路(Application Specific IntegratedCircuit,简称ASIC)、现成可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器41,处理器40读取存储器41中的信息,结合其硬件完成上述方法的步骤。
功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,电子设备,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
应注意到:相似的标号和字母在附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释,此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (10)
1.一种反编译方法,用于对Kotlin程序进行反编译,其特征在于:包括以下步骤:
获取目标字节码文件;
将所述字节码文件解析为指令列表,并按照预设的方式识别和处理所述字节码文件的Kotlin特性;
根据所述指令列表构建抽象语法树;
将所述抽象语法树转换成Kotlin源代码。
2.如权利要求1所述的反编译方法,其特征在于:将所述字节码文件解析为指令列表包括以下步骤:
读取所述字节码文件;
将所述字节码文件解析成指令流;
将所述指令流中的每个指令封装成指令对象;
将所述指令对象整合成所述指令列表。
3.如权利要求2所述的反编译方法,其特征在于:将所述字节码文件解析成指令流的过程中,根据Kotlin语法规则对所述字节码文件进行处理,以正确地识别和处理Kotlin特性。
4.如权利要求1所述的反编译方法,其特征在于:根据所述指令列表构建抽象语法树包括以下步骤:
读取所述指令列表;
根据所述指令列表生成所述抽象语法树中的节点,并将所述节点连接以形成所述抽象语法树。
5.如权利要求4所述的反编译方法,其特征在于:形成所述抽象语法树之后,还包括以下步骤:
通过合并相邻节点、优化变量声明顺序对所述抽象语法树进行优化。
6.如权利要求1所述的反编译方法,其特征在于:将所述抽象语法树转换成Kotlin源代码包括以下步骤:
判断所述抽象语法树是否可以直接生成Kotlin源代码,若可以,则遍历所述抽象语法树,将所述抽象语法树转换为Kotlin源代码,若不可以,则将所述抽象语法树生成JAVA源代码,然后按照预设的分析逻辑对所述JAVA源代码进行分析,再将所述JAVA源代码转换为Kotlin源代码。
7.一种反编译工具,用于实现如权利要求1-6任一项所述的反编译方法,其特征在于:包括:
接收模块:用于获取目标字节码文件;
字节码解析模块:用于将所述字节码文件解析为指令列表;
抽象语法树构建模块:用于根据所述指令列表构建抽象语法树;
反编译模块:用于将所述抽象语法树转换成Kotlin源代码。
8.如权利要求7所述的反编译工具,其特征在于:还包括代码模块,所述代码模块用于将所述反编译模块生成的Kotlin源代码输出到目标文件中。
9.一种可读存储介质,其上存储有计算机程序指令,其特征在于:所述计算机程序指令被执行时实现如权利要求1-6所述方法的步骤。
10.一种程序产品,包括计算机程序指令,其特征在于:所述计算机程序指令被执行时实现如权利要求1-6所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310469848.8A CN116521182A (zh) | 2023-04-27 | 2023-04-27 | 一种反编译方法、工具、可读存储介质及程序产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310469848.8A CN116521182A (zh) | 2023-04-27 | 2023-04-27 | 一种反编译方法、工具、可读存储介质及程序产品 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116521182A true CN116521182A (zh) | 2023-08-01 |
Family
ID=87393540
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310469848.8A Pending CN116521182A (zh) | 2023-04-27 | 2023-04-27 | 一种反编译方法、工具、可读存储介质及程序产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116521182A (zh) |
-
2023
- 2023-04-27 CN CN202310469848.8A patent/CN116521182A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106970820B (zh) | 代码存储方法及代码存储装置 | |
US11106437B2 (en) | Lookup table optimization for programming languages that target synchronous digital circuits | |
US20210365253A1 (en) | Heterogeneity-agnostic and topology-agnostic data plane programming | |
US7966609B2 (en) | Optimal floating-point expression translation method based on pattern matching | |
CN106547520B (zh) | 一种代码路径分析方法及装置 | |
CN106406972B (zh) | 程序编译方法和编译器 | |
US9753705B2 (en) | Conditional compilation of bytecode | |
WO2012103146A2 (en) | Utilizing special purpose elements to implement a fsm | |
CN111611152B (zh) | 测试用例生成方法、装置、电子设备及可读存储介质 | |
US10545743B2 (en) | Enhanced programming language source code conversion with implicit temporary object emulation | |
CN111249736A (zh) | 代码处理方法及装置 | |
CN113703779B (zh) | 一种跨平台的多语言编译方法和超轻量物联网虚拟机 | |
CN111427578B (zh) | 一种数据转换方法、装置及设备 | |
CN112558984A (zh) | 代码编译的方法、装置、电子设备以及服务器 | |
CN113254023B (zh) | 对象读取方法、装置和电子设备 | |
CN111880785A (zh) | 程序代码转换方法、装置,电子设备 | |
WO2013085025A1 (ja) | 最小カットセット評価システム、最小カットセット算出方法及びプログラム | |
CN108920179A (zh) | Java反射实现方法、装置和系统 | |
CN111399842B (zh) | 一种代码编译方法及装置 | |
CN109032572B (zh) | 一种基于字节码的java程序方法内联的方法 | |
CN116521182A (zh) | 一种反编译方法、工具、可读存储介质及程序产品 | |
CN117032719A (zh) | 针对TypeScript的静态编译方法及装置 | |
CN111309301A (zh) | 程序语言转换方法、装置和转换设备 | |
CN113568598A (zh) | 基于yosys实现求和运算的FPGA逻辑综合方法及装置 | |
JP2003256215A (ja) | プログラム変換方法、これを用いたデータ処理装置及びプログラム |
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 |