ELF文件

本文详细介绍了C语言从源代码到可执行文件的编译过程,包括编译、汇编和链接三个阶段。同时,探讨了Linux下可执行文件的ELF格式,包括ELF文件头、程序头表和节头表的作用。此外,还对比了Windows下的PE格式和Linux下的ELF格式在可执行文件和库文件上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看视频学习

C语言编译流程

  • 编译
    • 由C语言代码生成汇编代码
  • 汇编
    • 由汇编代码生成机器码
  • 链接 Object
    • 将多个机器码的目标文件链接成一个可执行文件
      在这里插入图片描述
英文解释
compiler编译器
Assembly汇编
object file目标文件
link链接
Executable可执行
Static Library静态链接库

在这里插入图片描述

Linux下的可执行文件ELF

什么是可执行文件?

  • 广义:文件中的数据是可执行代码的文件
    • .out、.exe、.sh、.py
  • 狭义:文件中的数据是机器码的文件
    • .out、.exe、.dll、.so
      可执行文件的分类
  • Windows:PE (Portable Executable 可移植可执行文件)
    • 可执行程序
      • .exe
    • 动态链接库
      • .dll
    • 静态链接库
      • .lib
    • Linux:ELF (Executable and Linkable Format 可执行与可链接格式)
      • 可执行程序
        • .out
      • 动态链接库
        • .so
      • 静态链接库
        • .a

在这里插入图片描述
在这里插入图片描述

  • ELF文件头表 (ELF header)
    • 记录了ELF文件的组织
  • 程序头表/段表 (Program header table)
    • 告诉系统如何创建进程
    • 生成进程的可执行文件必须拥有此程序
    • 重定位文件不一定需要
  • 节头表 (Section header table)
    • 记录了ELF文件的节区信息
    • 用于链接的目标文件必须拥有此结构
    • 其他类型目标文件不一定需要

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值