Skip to content
📌知识点小结
  • 编译型语言(C/C++、Go)先整体翻译成机器码再运行,运行快、产物是可执行文件。
  • 解释型语言(Python、JS)由解释器在运行时逐行翻译执行,灵活、跨平台、便于调试。
  • Java 走中间路线:先编译成字节码 .class,再由 JVM 解释/JIT 执行。
  • 字节码、虚拟机(JVM/V8)是理解 Java 反序列化、跨平台的基础。
  • 对安全而言,要知道“代码以什么形态存在、在哪里被执行”。
自测一下

0.30 解释型与编译型:代码怎么变成可执行

第〇篇「零基础预科」免费。这一篇讲代码写完后,计算机到底怎么"读懂并运行"它。

一、两种翻译方式

编译型

  • 代表:C、C++、Go;
  • 流程:源码 → 编译器整体翻译成特定平台的机器码(可执行文件)→ 直接运行;
  • 特点:运行快,但产物与平台绑定,改代码要重新编译。

解释型

  • 代表:Python、JavaScript;
  • 流程:源码由解释器在运行时逐行翻译执行,无需先产出机器码文件;
  • 特点:灵活、跨平台、方便调试和快速试错。

二、Java 的中间路线(重要)

Java 两者都不完全是:

  1. 源码 .java 先由 javac 编译成字节码 .class(不是某平台机器码,而是 JVM 的指令);
  2. 运行时由 JVM(Java 虚拟机) 加载字节码,解释执行,并可通过 JIT 把热点代码再编译成机器码提速。

正因为字节码与平台无关、由 JVM 统一执行,才有"一次编写,到处运行"。

三、几个相关概念

  • 虚拟机(VM):JVM 执行 Java 字节码;V8 是 Google 的 JS 引擎(也用 JIT);
  • 字节码(bytecode):面向虚拟机的指令,比机器码更抽象;
  • Python 也有 .pyc 字节码和 Python 虚拟机,只是对用户更透明。

四、安全视角

  • Java 反序列化操纵的正是 JVM 里的类与对象,TemplatesImpl 能把恶意字节码装进 _bytecodes、再由 JVM defineClass 加载执行——不理解字节码/类加载,就只能死记;
  • 编译型漏洞常涉及内存(缓冲区溢出等),解释型常涉及脚本注入;
  • 判断"代码在什么环境、以什么形态运行",是分析漏洞的起点。

五、本篇小结

  • 编译型先整体翻译机器码、运行快;解释型运行时逐行翻译、灵活。
  • Java 先编译为字节码 .class,再由 JVM 解释/JIT,跨平台。
  • 理解字节码、虚拟机、类加载,是理解 Java 反序列化的前提。
  • 安全分析要搞清代码的形态和执行位置。

下一篇 0.31 讲一项极其实用的能力:怎么读一段没见过的代码。