计算机基础篇-程序运行基础知识

chengsenw 项目开发评论2阅读模式

计算机基础篇-程序运行基础知识

程序诞生

机器语言(0 和 1)->汇编代码->高级语言

1、机器语言,又称机器码、原生码,电脑CPU可直接解读,因该语言与运行平台密切相关,故通用性很差;

2、汇编语言,是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在不同的设备中,汇编语言对应着不同的机器语言指令集, 运行时按照设备对应的机器码指令进行转换,所以汇编语言可移植性也较差;

计算机基础篇-程序运行基础知识

3、高级语言,与前两种语言相比,该类语言高度抽象封装,语法结构更接近人类语言,逻辑也与人类思维逻辑相似,因此具有较高的可读性和编程效率。但是高级语言与汇编语言相比,因编译生成的辅助代码较多,使运行速度相对“较慢”。java,c,c++,C#,pascal,python,lisp,prolog,FoxPro,易语言等等  均属于高级语言。

编译型与解释型

通过IDE(Integrated Developmet Environment)可快速生成程序,根据程序的生成和运行过程,程序大致可分为两类:编译型程序和解释型程序。

编译型程序:程序在执行前编译成机器语言文件,运行时不需要重新翻译,直接供机器运行,该类程序执行效率高,依赖编译器,跨平台性差,如C、C++、Delphi等;

解释型程序:程序在用编程语言编写后,不需要编译,以文本方式存储原始代码,在运行时,通过对应的解释器解释成机器码后再运行,如Basic语言,执行时逐条读取解释每个语句,然后再执行。由此可见解释型语言每执行一句就要翻译一次,效率比较低,但是相比较编译型程序来说,优势在于跨平台性好

编译型程序(C/C++为例)

以下是 C 语言生成可执行文件的过程

计算机基础篇-程序运行基础知识

大致分为编译和链接两个过程.

解释型程序(比如 python)

计算机基础篇-程序运行基础知识

Java首先将源代码通过编译器编译成.class类型文件(字节码),这是 JAVA 自定义的一种类型,只能由JAVA虚拟机(JVM)识别。程序运行时JVM从.class文件中读一行解释执行一行。另外JAVA为实现跨平台,不同操作系统对应不同的JVM。从这个过程来看JAVA程序前半部分经过了编译,而后半部分又经过解析才能运行,可以说是一种混合型程序,由于该类程序运行依赖虚拟机,一些地方称其为“虚拟机语言”

虚拟机语言(以 JAVA 为例):

计算机基础篇-程序运行基础知识

各语言开发运行一图流

计算机基础篇-程序运行基础知识

编译型程序完整流程图

编译型程序执行流程(以C/C++为例)═══════════════════════════════════════════════════════════════════┌─────────────────────────────────────────────────────────────┐│                    开发者编写源代码                          ││                    (开发阶段 - 离线)                         │└───────────────────────┬─────────────────────────────────────┘                        ▼               ┌─────────────────┐               │   源代码文件     │               │  (.c, .cpp等)    │               └────────┬─────────┘                        ▼         ┌─────────────────────────────┐         │      编译器 (Compiler)       │         │      (一次性编译过程)        │         └─────────────┬───────────────┘                       │           ┌───────────┴───────────┐           ▼                       ▼    ┌─────────────┐         ┌─────────────┐    │ 预处理阶段   │         │  词法分析    │    │ Preprocessor│         │ Lexical     │    │             │         │ Analysis    │    └──────┬──────┘         └──────┬──────┘           │                       │           └───────────┬───────────┘                       ▼               ┌─────────────┐               │  语法分析    │               │ Syntax      │               │ Analysis    │               └──────┬──────┘                      ▼               ┌─────────────┐               │  语义分析    │               │ Semantic    │               │ Analysis    │               └──────┬──────┘                      ▼               ┌─────────────┐               │ 中间代码生成 │               │ Intermediate│               │ Code Gen.   │               └──────┬──────┘                      ▼               ┌─────────────┐               │  代码优化    │               │ Code        │               │ Optimization│               └──────┬──────┘                      ▼               ┌─────────────┐               │ 目标代码生成 │               │ Target Code │               │ Generation  │               └──────┬──────┘                      ▼               ┌─────────────┐               │   汇编阶段   │               │  Assembler  │               └──────┬──────┘                      ▼               ┌─────────────┐               │  链接阶段    │               │    Linker   │               └──────┬──────┘                      ▼            ┌─────────────────┐            │ 可执行文件      │            │ (.exe, .out等)  │            └────────┬────────┘                     │                     ▼┌─────────────────────────────────────────────────────────────┐│                     运行阶段 (用户端)                        ││                   (可反复执行,无需编译)                     │└───────────────────────┬─────────────────────────────────────┘                        ▼               ┌─────────────────┐               │   操作系统加载   │               │   Program Loader│               └────────┬────────┘                        ▼               ┌─────────────────┐               │  分配内存空间    │               │  Memory         │               │  Allocation     │               └────────┬────────┘                        ▼               ┌─────────────────┐               │  初始化运行时    │               │  Runtime Init.  │               └────────┬────────┘                        ▼               ┌─────────────────┐               │   执行机器指令   │               │  CPU直接执行    │               │  (无需中间解释)  │               └────────┬────────┘                        ▼               ┌─────────────────┐               │   程序输出结果   │               │  Program Output │               └─────────────────┘

解释型程序完整流程图

解释型程序执行流程(以Python为例)═══════════════════════════════════════════════════════════════════┌─────────────────────────────────────────────────────────────┐│                    开发者编写源代码                          ││                    (开发阶段)                               │└───────────────────────┬─────────────────────────────────────┘                        ▼               ┌─────────────────┐               │   源代码文件     │               │  (.py, .js等)    │               └────────┬─────────┘                        │                        ▼┌─────────────────────────────────────────────────────────────┐│                     运行阶段 (用户端)                        ││                  (每次执行都需解释)                         │└───────────────────────┬─────────────────────────────────────┘                        ▼               ┌─────────────────┐               │  解释器启动     │               │  Interpreter    │               │    Startup      │               └────────┬────────┘                        ▼               ┌─────────────────┐               │  读取源代码     │               │  Read Source    │               │    File         │               └────────┬─────────┘                        ▼         ┌─────────────────────────────┐         │   逐行/逐块解释执行循环      │         │  (Line-by-Line Execution)   │         └─────────────┬───────────────┘                       │           ┌───────────┴───────────┐           ▼                       ▼    ┌─────────────┐         ┌─────────────┐    │ 词法分析     │         │ 执行当前行   │    │ Lexical     │         │ Execute     │    │ Analysis    │←───────→│ Current Line│    └──────┬──────┘         └──────┬──────┘           │                       │           ▼                       │    ┌─────────────┐               │    │ 语法分析     │               │    │ Syntax      │               │    │ Analysis    │←──────────────┘    └──────┬──────┘           │           ▼    ┌─────────────┐    │ 生成中间表示 │    │ Intermediate│    │  Code/Object│    └──────┬──────┘           │           ▼    ┌─────────────┐    │ 执行中间代码 │    │ Execute     │    │ Intermediate│    │  Code       │    └──────┬──────┘           │           └────────────┐                        ▼               ┌─────────────────┐               │  是否有下一行?  │               │  More Lines?    │               └────────┬────────┘                 Yes │  │ No                     ▼  ▼               ┌─────────────┐   ┌─────────────────┐               │ 读取下一行   │   │   程序结束      │               │ Read Next   │   │   Program End   │               │   Line      │   └─────────────────┘               └──────┬──────┘                      │                      ▼               继续解释执行循环

混合型程序(编译+解释)流程图

混合型程序执行流程(以Java为例)═══════════════════════════════════════════════════════════════════┌─────────────────────────────────────────────────────────────┐│                    开发者编写源代码                          │└───────────────────────┬─────────────────────────────────────┘                        ▼               ┌─────────────────┐               │   Java源文件    │               │   (.java)       │               └────────┬────────┘                        ▼         ┌─────────────────────────────┐         │     javac编译器              │         │    (编译为字节码)            │         └─────────────┬───────────────┘                       │           ┌───────────┴───────────┐           ▼                       ▼    ┌─────────────┐         ┌─────────────┐    │ 词法/语法分析│         │ 语义分析    │    │ Lexical/    │         │ Semantic    │    │ Syntax      │         │ Analysis    │    │ Analysis    │         └──────┬──────┘    └──────┬──────┘                │           │                       ▼           └───────────┬──────────────┐                       ▼              │               ┌─────────────┐        │               │ 生成字节码   │        │               │ Bytecode    │        │               │ Generation  │        │               └──────┬──────┘        │                      ▼               │               ┌─────────────┐        │               │   .class文件 │        │               │  (字节码)    │        │               └──────┬──────┘        │                      │               │                      ▼               │┌─────────────────────────────────────────────────────────────┐│                     运行阶段 (JVM)                          │└───────────────────────┬─────────────────────────────────────┘                        ▼               ┌─────────────────┐               │   JVM加载类     │               │  Class Loading  │               └────────┬────────┘                        ▼               ┌─────────────────┐               │  字节码验证     │               │  Bytecode      │               │  Verification  │               └────────┬────────┘                        ▼               ┌─────────────────┐               │  解释器执行     │               │  Interpreter    │               │  Execution      │               └────────┬────────┘                        ▼               ┌─────────────────┐               │  JIT编译器      │               │  (运行时优化)   │               ├─────────────────┤               │ • 热点代码检测   │               │ • 编译为机器码   │               │ • 缓存优化代码   │               └────────┬────────┘                        ▼               ┌─────────────────┐               │  执行机器码     │               │  Execute Native │               │    Code         │               └────────┬────────┘                        ▼               ┌─────────────────┐               │   程序输出      │               │  Program Output │               └─────────────────┘

现代语言混合执行模型

现代语言执行技术演进═══════════════════════════════════════════════════════════════════第一代:纯解释型┌─────┐   解释器    ┌─────┐│源码 │───────────▶│结果 │└─────┘  逐行解释   └─────┘典型:早期BASIC、Shell脚本第二代:纯编译型┌─────┐   编译器    ┌─────┐    CPU     ┌─────┐│源码 │───────────▶│可执行│──────────▶│结果 │└─────┘            └─────┘   执行     └─────┘典型:C、C++、Fortran第三代:字节码+解释┌─────┐   编译器    ┌─────┐   解释器    ┌─────┐│源码 │───────────▶│字节码│───────────▶│结果 │└─────┘            └─────┘  解释执行   └─────┘典型:Java、.NET(初始执行)第四代:字节码+JIT┌─────┐   编译器    ┌─────┐  解释器/JIT ┌─────┐│源码 │───────────▶│字节码│────────────▶│结果 │└─────┘            └─────┘  动态编译    └─────┘典型:Java(HotSpot)、JavaScript(V8)、Python(PyPy)第五代:AOT编译┌─────┐   AOT编译   ┌─────┐    CPU     ┌─────┐│源码 │───────────▶│可执行│──────────▶│结果 │└─────┘  预编译为    └─────┘   执行     └─────┘         机器码典型:Java(GraalVM Native)、JavaScript(WebAssembly)

以上内容是对程序运行的简单描述,面向零基础,详细的内容可以等我的逆向分析篇.

 
chengsenw
  • 本文由 chengsenw 发表于 2026年1月21日 01:29:22
  • 转载请务必保留本文链接:https://www.gewo168.com/10744.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: