当前位置: 首页 > news >正文

GCC背后的故事C程序常量变量的地址分配

1.GCC背后的故事
(一)准备工作
我们先打开Ubuntu系统,用mkdir命令创建一个新的文件夹来存放程序文件。然后通过vim命令编写一个简单的c语言程序文件helloworld.c。

屏幕截图 2025-10-07 202643

屏幕截图 2025-10-07 202919
(二)编译过程
1.预处理
预处理过程的完整流程:

  1. 字符集转换:处理源代码的字符编码
  2. 续行符处理:将反斜杠换行符连接为单行
  3. 注释删除:移除所有注释
  4. 宏展开:展开所有宏定义
  5. 条件编译:处理条件编译指令
  6. 头文件包含:插入包含的文件内容
  7. 特殊标记:添加行号和文件名信息
  8. 输出结果:生成预处理后的文本文件
    通过预处理,原始的C源代码被转换为不包含预处理指令的纯C代码,为后续的编译阶段做好准备。
    使用gcc进行预处理的命令如下:

屏幕截图 2025-10-07 205616
2.编译
预处理之后的编译阶段时将预处理生成的.i文件转换为汇编代码的过程。这是整个汇编过程的核心阶段。其主要任务为词法分析,语法分析,语义分析,中间代码生成,代码优化以及最后生成目标代码。
具体通过gcc命令实现该操作如下:

屏幕截图 2025-10-07 210045
通过上述命令生成的汇编代码如下所示:

屏幕截图 2025-10-07 222028
3.汇编
汇编阶段是将汇编代码转换为机器可执行的二进制目标代码的过程。这是将人类可读的汇编语言翻译成机器指令的关键步骤。汇编阶段的主要任务为指令翻译,符号解析,地址分配。
通过gcc命令实现汇编的操作如下:

屏幕截图 2025-10-07 210305
或者可以使用as命令进行汇编操作:

屏幕截图 2025-10-07 210526
4.链接
链接阶段是将多个目标文件(.o)和库文件组合成一个可执行文件或库文件的过程。这是编译过程的最后一步,解决了符号引用和地址重定位问题。链接阶段的主要任务为符号解析(解析所有未定义的符号引用),地址重定位(为代码和数据分配最终的内存地址),库链接(链接所需的静态库和动态库)。链接阶段完成后,就生成了可以直接在操作系统上运行的可执行文件。
使用特定的gcc命令可以链接动态库生成可执行文件,生成的ELF可执行文件的大小和链接的动态库如下所示:

屏幕截图 2025-10-07 210940
使用特定的gcc命令可以链接静态库生成可执行文件,生成的ELF可执行文件的大小和链接的静态库如下所示:

屏幕截图 2025-10-07 211144
(三)分析ELF文件

http://www.hskmm.com/?act=detail&tid=26414

相关文章:

  • 龙芯是被gcc正儿八经支持的
  • python程序设计课程练习题
  • IEEE754浮点格式与解析
  • 国庆 Day3 强基数学
  • Petrozavodsk Summer 2024. Day 1. Welcome Contest
  • 项目作业2
  • 如何使用 INFINI Gateway 对比 ES 索引数据
  • Ambari安装Hadoop
  • Ambari-bigtop搭建hadoop数据仓库架构
  • 安装Ambari集群
  • Python中的`namedtuple`:命名元组的用法与优势
  • 我的首页
  • 一摞python风格的纸牌
  • 记录一个ubuntu24.04蓝牙不显示不可用的解决方案
  • AI时代需要重新定义投资回报评估模型
  • MOVEit网络攻击波及普华永道与安永,供应链安全再响警钟
  • shell编程
  • Penchick Online Mathematical Olympiad, Qualifying Test 1, III.4
  • QBXT2025S刷题 Day6
  • CF2145 Educational Codeforces Round 183 (Rated for Div. 2) 游记
  • 52个AI工具
  • 可观测专题【左扬精讲】——《Go 语言实现企业级 APM 监控系统实战:从 0 到 1 搭建高性能监控平台》
  • 多区域多 VLAN 网络搭建与访问控制及服务器部署实验
  • Tina_Linux_系统软件 开发指南
  • 2025方钢、扁钢、圆钢、光轴、六角钢、异型钢、冷拉/冷拔方钢、冷拉/冷拔扁钢、冷拉/冷拔圆钢、冷拉/冷拔六角钢、冷拉/冷拔异型钢、热轧方钢/扁钢厂家权威推荐榜:坚固耐用与精准定制口碑之选
  • GO_基础2
  • LDO(一)FVF型LDO
  • 详细介绍:进阶智能体实战九、图文需求分析助手(ChatGpt多模态版)(帮你生成 模块划分+页面+表设计、状态机、工作流、ER模型)
  • 09. 常用控件
  • 201007