2301_79607402头像

HIT-ICS大作业-程序人生

摘  要

本文深入剖析 hello 程序完整生命周期,将其划分为七个关键阶段。预处理阶段,展开宏定义并替换头文件内容,为编译做好准备;编译阶段,编译器对代码进行语法语义分析,生成汇编代码,确保逻辑正确性;汇编阶段,将汇编代码转换为机器指令目标文件;链接阶段,整合各目标文件和库文件,形成可执行程序;运行时的进程阶段,操作系统进程管理机制调度控制程序执行;存储阶段,涉及程序在存储设备中的存储管理,确保数据持久保存。各阶段紧密联系,共同推动程序从代码到执行再到存储的全过程。

关键词:预处理;编译;汇编;链接;进程;存储    ;                            

(摘要0分,缺失-1分,根据内容精彩称都酌情加分0-1分)

目  录

第1章 概述

1.1 Hello简介

1.2 环境与工具

1.3 中间结果

1.4 本章小结

第2章 预处理

2.1 预处理的概念与作用

2.2在Ubuntu下预处理的命令

2.3 Hello的预处理结果解析

2.4 本章小结

第3章 编译

3.1 编译的概念与作用

3.2 在Ubuntu下编译的命令

3.3 Hello的编译结果解析

3.4 本章小结

第4章 汇编

4.1 汇编的概念与作用

4.2 在Ubuntu下汇编的命令

4.3 可重定位目标elf格式

4.4 Hello.o的结果解析

4.5 本章小结

第5章 链接

5.1 链接的概念与作用

5.2 在Ubuntu下链接的命令

5.3 可执行目标文件hello的格式

5.4 hello的虚拟地址空间

5.5 链接的重定位过程分析

5.6 hello的执行流程

5.7 Hello的动态链接分析

5.8 本章小结

第6章 hello进程管理

6.1 进程的概念与作用

6.2 简述壳Shell-bash的作用与处理流程

6.3 Hello的fork进程创建过程

6.4 Hello的execve过程

6.5 Hello的进程执行

6.6 hello的异常与信号处理

6.7本章小结

第7章 hello的存储管理

7.1 hello的存储器地址空间

7.2 Intel逻辑地址到线性地址的变换-段式管理

7.3 Hello的线性地址到物理地址的变换-页式管理

7.4 TLB与四级页表支持下的VA到PA的变换

7.5 三级Cache支持下的物理内存访问

7.6 hello进程fork时的内存映射

7.7 hello进程execve时的内存映射

7.8 缺页故障与缺页中断处理

7.9动态存储分配管理

7.10本章小结

第8章 hello的IO管理

8.1 Linux的IO设备管理方法

8.2 简述Unix IO接口及其函数

8.3 printf的实现分析

8.4 getchar的实现分析

8.5本章小结

结论

附件

参考文献


第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

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--