找回密码
 立即注册
首页 业界区 业界 一个程序在计算机中是如何运行的?

一个程序在计算机中是如何运行的?

屋稷删 2025-6-26 16:13:35
这是一个困扰了我很久的问题,但是之前都没有想过好好了解,最近在看《深入理解计算机系统》,想将整个流程归纳总结一下,文章结构包括:可执行目标文件的结构——>操作系统如何加载可执行文件——>CPU如何执行可执行文件
可执行目标文件结构(第七章节)

编译器通过预处理、编译、汇编、链接生成了最后的可执行目标文件,文件结构如下:
1.png

ELF头描述了代码段.text、.init、.rodata,数据段.data和.bss的位置,在最初加载可执行文件时,会被率先读取到内核态的临时缓冲区,用于构建虚拟映射VMA,说明整个程序的虚拟内存里,哪里是代码段,哪里是数据段。
.init是在main()函数执行之前需要运行的代码,想知道请自行了解。在经过链接之后,代码段里的符号引用已经被重定位成了在代码段和数据段的地址,翻译成汇编语言,就是我们所看到的:
[code].section .rodata.LC0:    .string "Hello, World!".text.globl mainmain:    push    rbp    mov     rbp, rsp    sub     rsp, 16    lea     rdi, [rip + .LC0]     # rdi = "Hello, World!"    call    std:perator
您需要登录后才可以回帖 登录 | 立即注册