本文深入剖析 hello 程序完整生命周期,将其划分为七个关键阶段。预处理阶段,展开宏定义并替换头文件内容,为编译做好准备;编译阶段,编译器对代码进行语法语义分析,生成汇编代码,确保逻辑正确性;汇编阶段,将汇编代码转换为机器指令目标文件;链接阶段,整合各目标文件和库文件,形成可执行程序;运行时的进程阶段,操作系统进程管理机制调度控制程序执行;存储阶段,涉及程序在存储设备中的存储管理,确保数据持久保存。各阶段紧密联系,共同推动程序从代码到执行再到存储的全过程。
关键词:预处理;编译;汇编;链接;进程;存储 ;
(摘要0分,缺失-1分,根据内容精彩称都酌情加分0-1分)
目 录
第1章 概述
1.1 Hello简介
1. 利用编辑器创建 hello.c 源文件,产出 hello.c 源代码。
2. 调用 C 预处理器(cpp),对 hello.c 执行预处理操作,产出 hello.i 文件。
3. 启动 C 编译器(ccl),把 hello.i 转译为汇编语言形式的 hello.s 文件。
4. 依靠汇编器(as),将 hello.s 转换成可重定位的目标文件 hello.o。
5. 运行链接器 ld,使 hello.o 与系统目标文件结合,生成可执行的目标文件 hello。
6.通过shell输入./hello,shell通过fork函数创建新的进程,然后调用了execve对虚拟内存进行映射,通过mmap为hello开辟一片空间。
7.中央处理器CPU从虚拟内存中的.text,.data截取代码和数据,调度器为进程规划时间片,在发生异常时触发异常处理子程序
1.2 环境与工具
硬件环境:Intel(R) Core(TM) i7-10875H CPU 2.30 GHz;16GRAM;1024Disk
软件环境:Windows11 64位;Vmware 16;Ubuntu 20.04 LTS 64位
工具:codeblocks;gdb;Objdump;HexEdito
1.3 中间结果
| 功能 |
文件名称 |
功能 |
文件名称 |
功能 |
|
| hello.c |
源程序 |
hello.i |
预处理后文件 |
hello.s |
编译后的汇编文件 |
| hello.o |
汇编后的可重定位目标执行文件 |
hello |
链接后的可执行文件 |
hello.elf |
hello.o的ELF格式 |
| hello1.txt |
hello.o的反汇编代码 |
hello2.txt |
Hello的反汇编代码 |
hello1.e;f |
hello的ELF格式 |
1.4 本章小结
本章总体介绍了hello程序“一生”的过程,以及进行实验时的软硬件环境及开发与调试工具等基本信息。
(第1章0.5分)
第2章 预处理
2.1 预处理的概念与作用
1. 概念:预处理器根据以字符”#”开头的命令,处理hello.c源程序。
2. 作用:根据源代码中的预处理指令修改源代码,预处理从系统头文件中将头文件的源码插入到目标文件中,最终生成hello.i文件。
2.2在Ubuntu下预处理的命令
Linux中预处理hello.c文件的命令是:gcc -E -o hello.i hello.c

2.3 Hello的预处理结果解析
经过预处理后,hello.c被处理成为hello.i文件。打开文件后发现hello.i文件中文件内容大大增加,且仍为可阅读的c语言程序文本文件。hello.i文件对hello.c程序中的宏进行了宏展开,该文件包含了头文件中的内容。如果代码中有#define命令还会对相应符号进行替换。
2.4 本章小结
本章介绍了预处理的相关概念和作用,进行实际操作查看了hello.i文件,是对源程序进行补充和替换
(第2章0.5分)
第3章 编译
3.1 编译的概念与作用
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/2301_79607402/article/details/148051108



