哈工大 2021春 计算机系统 大作业 L190201101-朴仁洪

@

计算机系统

大作业

题 目 程序人生-Hello’s P2P
专 业 计算机类
学   号 L190201101
班   级 1903005
学 生 朴仁洪  
指 导 教 师 史先俊

计算机科学与技术学院
2021年5月
摘 要
摘要是论文内容的高度概括,应具有独立性和自含性,即不阅读论文的全文,就能获得必要的信息。摘要应包括本论文的目的、主要内容、方法、成果及其理论与实际意义。摘要中不宜使用公式、结构式、图表和非公知公用的符号与术语,不标注引用文献编号,同时避免将摘要写成目录式的内容介绍。

关键词:关键词1;关键词2;……;

目 录

第1章 概述 - 4 -
1.1 HELLO简介 - 4 -
1.2 环境与工具 - 4 -
1.3 中间结果 - 4 -
1.4 本章小结 - 4 -
第2章 预处理 - 5 -
2.1 预处理的概念与作用 - 5 -
2.2在UBUNTU下预处理的命令 - 5 -
2.3 HELLO的预处理结果解析 - 5 -
2.4 本章小结 - 5 -
第3章 编译 - 6 -
3.1 编译的概念与作用 - 6 -
3.2 在UBUNTU下编译的命令 - 6 -
3.3 HELLO的编译结果解析 - 6 -
3.4 本章小结 - 6 -
第4章 汇编 - 7 -
4.1 汇编的概念与作用 - 7 -
4.2 在UBUNTU下汇编的命令 - 7 -
4.3 可重定位目标ELF格式 - 7 -
4.4 HELLO.O的结果解析 - 7 -
4.5 本章小结 - 7 -
第5章 链接 - 8 -
5.1 链接的概念与作用 - 8 -
5.2 在UBUNTU下链接的命令 - 8 -
5.3 可执行目标文件HELLO的格式 - 8 -
5.4 HELLO的虚拟地址空间 - 8 -
5.5 链接的重定位过程分析 - 8 -
5.6 HELLO的执行流程 - 8 -
5.7 HELLO的动态链接分析 - 8 -
5.8 本章小结 - 9 -
第6章 HELLO进程管理 - 10 -
6.1 进程的概念与作用 - 10 -
6.2 简述壳SHELL-BASH的作用与处理流程 - 10 -
6.3 HELLO的FORK进程创建过程 - 10 -
6.4 HELLO的EXECVE过程 - 10 -
6.5 HELLO的进程执行 - 10 -
6.6 HELLO的异常与信号处理 - 10 -
6.7本章小结 - 10 -
第7章 HELLO的存储管理 - 11 -
7.1 HELLO的存储器地址空间 - 11 -
7.2 INTEL逻辑地址到线性地址的变换-段式管理 - 11 -
7.3 HELLO的线性地址到物理地址的变换-页式管理 - 11 -
7.4 TLB与四级页表支持下的VA到PA的变换 - 11 -
7.5 三级CACHE支持下的物理内存访问 - 11 -
7.6 HELLO进程FORK时的内存映射 - 11 -
7.7 HELLO进程EXECVE时的内存映射 - 11 -
7.8 缺页故障与缺页中断处理 - 11 -
7.9动态存储分配管理 - 11 -
7.10本章小结 - 12 -
第8章 HELLO的IO管理 - 13 -
8.1 LINUX的IO设备管理方法 - 13 -
8.2 简述UNIX IO接口及其函数 - 13 -
8.3 PRINTF的实现分析 - 13 -
8.4 GETCHAR的实现分析 - 13 -
8.5本章小结 - 13 -
结论 - 14 -
附件 - 15 -
参考文献 - 16 -

第1章 概述
1.1 Hello简介
根据Hello的供述,使用计算机系统的术语简述Hello的P2P, 020的全过程。
P2P:在Linux中,hello.c经过cpp的预处理、ccl的编译、 as的汇编、 ld的链接, 成为目标程序hello。 从 shell 输入启动命令, shell 将生成子进程 。 然后hello从程序变为程序。
020: shell 以映射方式显示此进程的 execve. 虚拟内存 。 在程序入口处, 程序开始装入物理内存, 并进入 main 函数运行目标代码 。 CPU 为运行中的 hello 时间套餐执行逻辑流媒体 。当程序运行时, Shell 父进程将回收 Hello 进程, 从内核中删除相关数据结构 。
1.2 环境与工具
硬件环境:X64 CPU;2GHz;2G RAM;256GHD Disk 以上
软件环境:Windows7 64位以上;VirtualBox/Vmware 11以上;Ubuntu 16.04 LTS 64位/优麒麟 64位
开发与调试工具:gcc,vim,edb,readelf,HexEdit
1.3 中间结果
hello.i hello.c预处理之后文本文件
hello.s hello.i编译后的汇编文件
hello.o hello.s汇编之后的可重定位目标文件
hello 链接之后的可执行目标文件
hello.out hello反汇编之后的可重定位文件
1.4 本章小结
本章主要介绍hello的p2p、020过程,并介绍本次实验信息:环境、中间结果以及大体上hello程序从c程序hello.c到可执行的目标文件hello的大致过程。 。

第2章 预处理
2.1 预处理的概念与作用

预处理概念:预处理器cpp根据以字符#开头的命令修改原始的C程序,将引用的所有库展开合并成为一个完整的文本文件。
预处理级别角色 :

  1. 预处理的处理器根据#if, #ifdef等编译命令和以后的条件,包含或排除原程序的一部分。 将常规的除外词组转换为空行 。
  2. 编译处理条件命令
    条件编译指令 : #ifdef, #ifdef, #else, #elif, #endif等. 这些假指令的引入,使程序员得以定义为不同的矩阵,从而决定编译程序要处理哪些代码。预先编译过的程序会根据相关文件过滤不必要的代码 。
  3. 令如#include "FileName"或者#include 等。 此命令将全部头文件的定义放入输出文件, 以便编译程序能够处理。
    4.处理特殊符号
    预编程序可以识别一些特殊符号。 例如,源代码中出现的线标是当前行号(十进制数),FILE是目前编译的C源程序的名字。预先编译过的程序将被来源于源程序的矩阵替换为合理值 。

2.2在Ubuntu下预处理的命令
gcc hello.c -E -o hello.i
在这里插入图片描述

2.3 Hello的预处理结果解析
在这里插入图片描述

2.4 本章小结
介绍了用定义的宏观符号替换符号、导入到头文件的内容、根据命令的选择性编译等预处理的相关概念及其处理。

第3章 编译
3.1 编译的概念与作用

编译的概念:编译器将包含汇编语言程序的文本文件翻译成hello.s。输入高级编程语言的源头顺序,输出用汇编语言或机器语言标记的目标程序。 这个过程被称为编译,同时起到编译的作用。
编译程序的基本功能是将源代码(高级语言)翻译成目标程序。除基本功能外,还具备语法检查、调试措施、修改手段、覆盖处理、目标程序优化、各语言应用及人际网络等重要功能。
3.2 在Ubuntu下编译的命令
gcc -S hello.i -o hello.s
在这里插入图片描述

3.3 Hello的编译结果解析
在这里插入图片描述

.file:声明源文件
.text:代码节
.section:
.rodata:只读代码段
.align:数据或者指令的地址对其方式
.string:声明一个字符串(.LC0,.LC1)
.global:声明全局变量(main)
.type:声明一个符号是数据类型还是函数类型
3.3.1数据
1.字符串
程序中有两个字符串,由上图可知,这两个字符串都在只读数据段中,分别如图所示:
在这里插入图片描述

3.main函数
参数 argc 作为用户传给main的参数。也是被放到了堆栈中。

4.各种立即数
立即数直接体现在汇编代码中

5.数组:char *argv[]
hello.c的唯一数组是main函数的第二参数,每个参数都是指向文字的指针。在堆栈- 32 (% rbp) 中保存初始地址, 并在 printf 中两次调用参数 。
在这里插入图片描述

红色:数组argv的存放的位置:-32(%rbp)
蓝色:分别获取argv[1]和argv[2]的地址
3.3.2.全局函数

  • int main (int argc,char *argv[]){
    在这里插入图片描述

从 hello.c 可以看出 hello.c 描述并编译了全局函数 int main( intargc, char*argv[])后,将main函数中使用的字符串常量也保存到数据区域。

3.3.3赋值操作
程序的副值操作主要如下:i=0的副值操作主要在汇编代码中使用mov指令进行,但根据数据类型的不同,有多种不同的后缀。
movb:一个字节
movw:两个字节
movl:四个字节
movq:八个字节

3.3.4算数操作

hello.c中的算数操作有:i++,由于是i是int类型的,因此汇编代码只用addl就能实现其他的操作有

lead S,D D=&S
INC D+=q
DEC D D-=1
NEG D D

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值