反编译工具(lua反编译工具)

  今天卷痴旋给大家分享反编译工具(lua反编译工具),希望对您有所帮助!

每个人都注定要体验人生的美好,也会体验那不可避免的黑暗:幻灭、衰老、疾病、孤独、丧失、无意义、痛苦的选择和死亡

它是一个基本概念

可以使用javac命令将Java程序的源代码编译成Java字节代码称为class文件

但是字节码不是机器语。为了使机器能够运行,需要将字节码翻译成机器指令。

注:不要混淆编译和解释执行。后面的后端编译是JVM为提高效率而优化的。

对于不同的虚拟机实现,执行引擎执行字节码通常有两种选择,一种是解释执行(由解释器执行),另一种是编译执行(由即时编译器生成本地代码执行)

请考虑Java是编译语言还是解释语言

为什么java不编译到运行文件中呢

为了实现跨平台

通过将Java源代码编译为字节码,然后在不同平台的虚拟机上解释并运行它,一次编译,实现随时随地运行的跨平台效果

编译原理

Java语言有编译期间前端编译打开两个后端编译是阶段性的

前端编译

前端编译是将*.java文件转换为*.class文件的过程。

包括词法分析、语法分析、语义分析和中间代码生成

有以下步骤

Java编译和它是反编译的那些事

后端编译

在一些商用虚拟机中,Java程序最初由解释器解释执行,但是当发现虚拟机的某种方式或代码块执行得特别频繁时,就可以将这些代码是热代码

为了提高热代码的执行效率,虚拟机在运行时将这些代码编译成与本地平台相关的机器代码。

执行此任务的后端编译器称为即时编译器(JIT编译器)

反编译

什么是反编译

Java编译是将Java源代码编译为Java字节代码的过程

Java反编译是从Java字节码翻译成源代码的过程

为什么需要反编译呢

源代码是字符代码字节代码是二进制流,源代码是给人看的,字节代码是给虚拟机看的

所以为了让别人看到,你需要把字节码转换成源代码。如果希望在虚拟机上运行,则必须将源代码编译为字节码。如果有想看源代码的类文件,可以通过反编译来实现。

比如某个想理解Java语法的糖编译后,再反过来编译是怎样的;别人给你发了一个jar包,你需要看看其中的某个类是怎么写的,等等的情况都可以认为是用Java反编译的

它是一个反编译工具

在线反编译工具

1.http://www.decompiler.com/

2. http://www.javadecompilers.com/主要网站的优势是各种反编译器的选择

脱机反编译工具

JD-GUI

GitHub :https://github.com/java-decompiler/jd-gui


官方网站:http://java-decompiler.github.io/是的

Java编译和反编译那些事

你只需将下载的文件或jar包直接拖到屏幕上

Luyten

下载地址:https://github.com/deathmarine/luyten/releases

Arthas

主页:https://arthas.aliyun.com/doc/

可以使用jad命令将在JVM中运行的class的byte code反编译为java代码


这个工具非常好用,强烈推荐。

其他工具

javap

javap是jdk的工具,可以对代码进行反编译,也可以看到java编译器生成的字节码。


用javap-help看使用方法

用法:javap lt;optionsgt;lt;classesgt;其中可能的选项包括:-帮助-帮助-输出此用法消息-版本信息-v-verbose输出附加信息-l行号和本地变化表-public仅显示公共类和成员-protected显示受保护/公共类和成员-package显示程序包显示“吉”/“受保护的”/“公用类”时显示成员(默认)-p-private所有类和成员-c反汇编代码-s输出内部签名-sysinfo显示正在处理的类的系统信息(路径、大小、日期、MD5散列)-constants显示最终常量-classpath lt;pathgt;指定查找用户类文件的位置-cp lt;pathgt;指定查找用户类文件的位置-bootclasspath lt;pathgt;覆盖引导文件的位置

基本用法:

javac Test.javajavap -c Test.class

jclasslib

jclasslib是可以直接安装在IDEA插件上的可视化字节码浏览工具

安装后,在IDEA中编译源代码后,可以选择“-gt;”在“显示字节码”中查看字节码

您可以直观地看到class文件包含基本信息、常量池、接口信息、字段信息、方法信息和属性信息。

其中方法信息还包括行号表,局部变化表、异常表等

阅读字节码命令有很多知识。后面的文章将详细说明class文件结构和字节码命令的执行步骤。

推荐两本非常经典的图书:《深入了解Java虚拟机》,《Java虚拟机规格》

反编译示例

我们来看一个简单而常见的例子

public class ForEachDemo { public static void main(String[] args) { List<String> data = new ArrayList<>(); data.add("a"); data.add("b"); for (String str : data) { System.out.println(str); } }}

在IDEA中直接编译该类的文件,然后在target目录中查找该类。双击打开可获得以下反编译源代码:。

public class ForEachDemo { public ForEachDemo() { } public static void main(String[] args) { List<String> data = new ArrayList(); data.add("a"); data.add("b"); Iterator var2 = data.iterator(); while(var2.hasNext()) { String str = (String)var2.next(); System.out.println(str); } }}

从上面的反编译代码可以明显看出,如果原始代码没有写构建,编译器会自动生成默认的构建。如果foreach循环遍历list,则下面的部分由iterator执行

最后的

2021最新完整的面试问题和答案(全部整理成文档),详细说明mysql、netty、spring、线程、spring cloud、JVM、源代码、算法等,详细学习计划图等学习资料,私信我:Java取得!

Java编译和反编译那些事

以上内容就是小编为大家分享的反编译工具(lua反编译工具)相关知识,如果还想知道更多请搜索其他问题。