Java基础04 编译与反编译
1. 编译
编译: 把所写的高级语言所写作的源代码程序,转换成计算机能直接识别、执行的低级语言的程序,也就是可执行文件。
Java语言的编译: Java语言作为一种高级语言,想要被执行就要通过编译将其转换为机器语言。Java的编译分为两步:
1)前端编译: * . java文件转换为 * .class文件(字节码文件)。Java的前端编译器主要是javac, Eclipse JDT 中的增量式编译器 ECJ 等。
2)后端编译:在经过后端编译器,将class字节码文件,编译成机器语言。Java的后端编译器主要是各大虚拟机实现的,如HotSpot中的JIT编译器。
高级语言: 程序员使用。高度封装的编程语言,如Java、c、c++,Python等,计算机无法直接识别,需转换为机器语言。
低级语言: 与高级语言相对,低级指接近电脑底层的编程,主要语言有机器语言和汇编语言。
机器语言: 针对计算机而言。机器能直接识别的程序语言或代码指令,无需经过翻译,每一段操作码在计算机内部都有相应的电路来完成它,或指不经翻译即可为机器直接理解和接受的程序语言或指令代码。用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合。
汇编语言: 用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言。不同设备中,编程语言对应不同的机器语言指令集。用一些容易理解和记忆的字母、单词来代替一个特定的指令,如“ADD”表示数字逻辑上的加减,“MOV”表示数据传递等。
2. 反编译
通过编译器,可以把高级语言的源代码编译成低级语言,反之,可以通过低级语言进行反向获取源代码。这个过程即反编译。很难将机器语言反编译成源代码,但是能把中间代码进行反编译,即虽然不能把经过虚拟机编译后的机器语言进行反编译,但是可以把javac编译得到的class进行反编译。Java的反编译,一般是将class文件转换成java文件。
1)反编译作用
学习Java的一种方法。Java中源代码为.java文件,然后经过编译后生成计算机可识别的.class文件,但是.class文件是计算机识别的,因此需要反编译变成程序员能看懂的代码,但是反编译后的代码并不是和源码一模一样,而是非常接近的。并且经过反编译,也可以学习别人的代码。
2)反编译方法
Java文件编译后编程字节码文件(class文件),我们无法看懂,要是想要看懂就需要反编译。反编译的一种简单方法:(使用IDEA)把class文件,拖拽到IntelliJ IDEA工具中,IntelliJ自动进行反编译。
实例:
Java源代码:
public class data {public static void main(String[] args) {String name = "张三";switch(name){case "张三":System.out.println("张三");break;case "李四":System.out.println("李四");break;default:System.out.println("未知");}}
}
反编译过程:
点开项目结构,找到如如下红框所示的编译输出路径。打开路径,找到对应class文件。
选择打开文件,跳到如下含Java文件的文件夹中,将刚刚找到的class文件复制到该文件夹后,点击打开。
得到如下反编译之后的文件,通过IDEA。
Java中有很多反编译工具。
javap: jdk自带的一个工具,可以对代码反编译,也可以查看java编译器生成的字节码。javap生成的文件并不是java文件,而是class字节码文件。
jad: 只要下载一个执行工具,就可以实现对class文件的反编译了。 可以把class文件反编译成java文件的。jad已经很久不更新了,在对Java7生成的字节码进行反编译时,偶尔会出现不支持的问题,在对Java 8的lambda表达式反编译时就彻底失败。
CFR:可代替jad,相比jad来说,语法会稍微复杂一些。
JD-GUI:一个独立的图形实用程序,显示“.class”文件的Java源代码,可以使用JD-GUI浏览重建的源代码,以便立即访问方法和字段。
3)防止反编译
a. 隔离Java程序,让用户接触不到*.class文件;
b. 对 * . class文件进行加密,增加破解难度;
c. 代码混淆(Obfuscated code)亦称 花指令 ,将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式。
Java基础04 编译与反编译相关推荐
- Java——编译与反编译
** 一.基础知识 ** 1.1 编程语言 在介绍编译和反编译之前,我们先来简单介绍下编程语言(Programming Language).编程语言(Programming Language)分为低级 ...
- Java jar 如何防止被反编译?代码写的太烂,害怕被人发现
欢迎关注方志朋的博客,回复"666"获面试宝典 java作为解释型的语言,其高度抽象的特性意味其很容易被反编译,容易被反编译,自然有防止反编译措施存在.今天就拜读了一篇相关的文章, ...
- java反编译工具_漫话:如何给女朋友解释什么是编译与反编译
戳蓝字"CSDN云计算"关注我们哦! 来源 | 漫话编程 某天下班后,我在家里进行电话面试,问到面试者这样一个问题:"你知道使用哪些办法可以反编译Java代码吗?&quo ...
- Java开发必会的反编译知识
转载自 Java开发必会的反编译知识 编程语言 在介绍编译和反编译之前,我们先来简单介绍下编程语言(Programming Language).编程语言(Programming Language)分为 ...
- Java代码的编译与反编译那些事儿
GitHub 2.5k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 2.5k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 2.5k Star 的 ...
- Java的class文件批量反编译成Java文件
Java的class文件批量反编译成java文件 Class文件是java文件编译后产生的一个文件,class文件便于在软件上运行,但是我们无法阅读中间的程序,所以我们需要将class文件转换成jav ...
- java编译和反编译
Java开发必会的反编译知识(附支持对Lambda进行反编译的工具) (qq.com)https://mp.weixin.qq.com/s?__biz=MzI3NzE0NjcwMg==&mid ...
- java反编译是什么_什么是Java代码的编译与反编译?
Java代码的编译与反编译 2017-02-21 Hollis 数盟 一.什么是编译 1.利用编译程序从源语言编写的源程序产生目标程序的过程. 2.用编译程序产生目标程序的动作. 编译就是把高级语言变 ...
- java编译与反编译
文章目录 1.编译和反编译 2.编译有依赖,无法通过 试验一: 2.1.解决方案一: 2.2.解决方案二: 2.3.javac编译之后的class文件 原理 1.编译和反编译 Java的编译分为两个阶 ...
最新文章
- python requests
- 网页插件学javascript还是jquery好啊?
- 下面有关html5标签说法错误的有,前端面试题(2016含答案)
- python面向对象程序设计实训学生自我总结_Python面向对象程序设计示例小结
- ubantu下面U盘无法识别
- 生死狙击服务器名字怎么修改器,生死狙击修改金币方法
- 想不明白:为什么龙芯取消了MIPS版OpenJDK8开源
- comps电磁场模拟软件_|Mentor Graphics IE3D(电磁场仿真软件)下载v15.0官方版 - 欧普软件下载...
- 万年历插件软件测试,万年历的程序代码
- 信息安全概论复习笔记
- python 简单图片识别
- 通过motion实现摄像头远程监控(转)
- 应用程序错误(0xc0000135)
- 5 款让开发效率倍增的 VS Code 插件
- vue动画transition
- 使用layui框架迅速搭建后台管理页面
- hydrus1d使用说明_HYDRUS——1D中文说明书.pdf
- 微信企业号开发之加密方案与全局返回码说明
- 如果多屏成为习惯 —— ThinkVision M14 便携显示器评测
- linux禁用小企鹅输入法,小企鹅(fcitx)输入法停止开发