什么是编译
利用编译程序从源语言编写的源程序产生目标程序的过程
用编译程序产生目标程序的动作。 编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。 编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息,具体参考 Javac编译与JIT编译
什么是反编译
- 计算机软件反向工程(Reverse engineering)也称为计算机软件还原工程,是指通过对他人软件的目标程序(可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理、结构、算法、处理过程、运行方法等设计要素,某些特定情况下可能推导出源代码。反编译作为自己开发软件时的参考,或者直接用于自己的软件产品中
反编译的原理
JVM
- JVM是什么?我的理解简单来说是:一个能把Class字节码翻译成本机cpu能够识别的指令的程序
流程
Java源码(.java文件) => 编译器 => Class文件 => JVM => 可执行的指令
- 不一定只有Java,例如Scala,Groovy等基于JVM的语言,只要能编译成标准Class的都可以
Class文件
详情参见 Class类文件结构
class文件结构介绍: 根据java虚拟机规范的规定,class文件格式采用一种类似c语言结构体的伪结构来存储,这种伪结构中只有两种数据类型:无符号数和表。 无符号数:无符号数属于基本的数据类型&#