2019-2020-1 20199314 <Linux内核原理与分析>第二周作业
1.基础学习内容
1.1 冯诺依曼体系结构
计算机由控制器、运算器、存储器、输入设备、输出设备五部分组成。
1.1.1 冯诺依曼计算机特点
(1)采用存储程序方式,指令和数据不加区别混合存储在同一个存储器中。
(2)存储器是按地址访问的线性编址的一维结构,每个单元的位数是固定的。
(3)指令由操作码和地址组成。操作码指明本指令的操作类型,地址码指明操作数和地址。操作数本身无数据类型的标志,它的数据类型由操作码确定。
(4)通过执行指令直接发出控制信号控制计算机的操作。指令在存储器中按其执行顺序存放,由指令计数器指明要执行的指令所在的单元地址。
(5)以运算器为中心,I/O设备与存储器间的数据传送都要经过运算器。
(6)数据以二进制表示。
1.2 汇编中的寄存器-以32bit系统为例
1.2.1 寄存器分类
4个数据寄存器(EAX、EBX、ECX和EDX)
2个变址和指针寄存器(ESI和EDI)
2个指针寄存器(ESP和EBP)
6个段寄存器(ES、CS、SS、DS、FS和GS)
1个指令指针寄存器(EIP)
1个标志寄存器(EFlags)
1.2.2 通用及指令指针寄存器的详细介绍
CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取,不会影响高16位的数据。这些低16位寄存器分别命名为:AX、BX、CX和DX。
4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。如下图。
1.3 计算机执行指令过程
根据PC(程序计数器,32位系统中为eip)取指令-->指令译码-->取操作数-->指令执行-->回写结果-->修改PC的值-->继续执行下一条指令。如图。
1.4 寻址方式
- 立即寻址方式(immediate addressing)
操作数直接包含在指令中,紧跟在操作码之后的寻址方式称为立即寻址方式,把该操作数称为立即数。 - 寄存器寻址
- 立即数寻址
- 直接寻址
- 间接寻址
变址寻址
2.汇编语言学习
2.1汇编语言基本概念
- 汇编指令:机器码的助记符,有对应的机器码
- 伪指令: 没有对应的机器码,由编译器执行,计算机并不执行
- 其他符号: 如: +、-、*、/ 等,由编译器识别,没有对应的机器码
汇编语言的特点:
① 所占空间、执行速度与机器语言相仿
② 直接、简捷,能充分控制计算机的硬件功能2.2堆栈
2.2.1堆栈的基本概念
堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。如图。
2.2.2堆栈向上增长和向下增长
假设堆栈大小为256,一般而言32位系统中堆栈方向是向下增长的。
- 向下增长,就是从高地址向低地址增长。栈顶即为&Taskstk[255]。
- 向上增长,就是从低地址向高地址增长。栈顶即为&Taskstk[0]。
2.2.3堆栈中的基本操作及其对应的汇编语言
- 进栈指令 PUSH
- 出栈指令 POP
- 调用进程 CALL
- 返回进程 RET
清除进程 LEAVE
2.3挑战问题
在实验楼环境下采用vim编辑器,编写一段简单c程序,并探究c语言在汇编语言下的转换格式和内容。 将c语言文件转化为32的汇编语言,代码中函数调用内核的情况,堆栈中的变化。
2.3.1 步骤
编写的C语言程序
- gcc编译代码
- 转换为汇编语言
去掉辅助信息
2.3.2 代码分析
调用流程 main函数
汇编语言调用堆栈变化过程
初始阶段,esp、ebp指针都是指向1000这个位置(假设堆栈大小为1000)
执行main函数
执行
执行跳转到f函数执行
执行
-执行跳转到g函数
执行
- 执行
- 执行
- 执行
- 执行
- 执行
执行
以上展示了一段简单代码调用函数的过程.
展示了整个堆栈从占用->释放的过程.
总结
本周的的学习相对于上周的Linux基础是一个进阶,开始了解Linux的内核,学习了32位和16位,64位系统的区别,了解到寄存器的分类,以及寄存器的用处.学习了一些底层的调用,任何c语言在底层中都会转化为汇编语言,之前学习的简单加法程序就是由高级语言编写,并解释成汇编语言再对底层进行调用,由此可以发现高级语言虽然语法简单\可视性强,但是硬件无法直接识别,故其运行速度\可靠性并不如汇编语言.但是未来的趋势就是越来越封装的语言,未来知识越来越多\学习的时间越来越少\利用前人造好的零件去组装汽车这一行为越来越被人接受,火爆的python语言不就是符合未来的趋势吗?
2019-2020-1 20199314 <Linux内核原理与分析>第二周作业的更多相关文章
- 2019-2020-1 20199303<Linux内核原理与分析>第二周作业
2019-2020-1 20199303第二周作业 1.汇编与寄存器的学习 寄存器是中央处理器内的组成部份.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和位址.在中央处理器的控制部件中 ...
- 20169219 linux内核原理与分析第二周作业
"linux内核分析"的第一讲主要讲了计算机的体系结构,和各寄存器之间对数据的处理过程. 通用寄存器 AX:累加器 BX:基地址寄存器 CX:计数寄存器 DX:数据寄存器 BP:堆 ...
- 2019-2020-1 20199314 <Linux内核原理与分析>第一周作业
前言 本周对实验楼的Linux基础入门进行了学习,目前学习到实验九完成到挑战二. 学习和实验内容 快速学习了Linux系统的发展历程及其简介,学习了下的变量.用户权限管理.文件打包及压缩.常用命令的和 ...
- Linux内核原理与分析-第二周作业
写之前回看了一遍秒速五厘米:如果
- Linux内核原理与分析-第一周作业
本科期间,学校开设过linux相关的课程,当时的学习方式主要以课堂听授为主.虽然老师也提供了相关的学习教材跟参考材料,但是整体学下来感觉收获并不是太大,现在回想起来,主要还是由于自己课下没有及时动手实 ...
- 2018-2019-1 20189221《Linux内核原理与分析》第一周作业
Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ...
- 2020-2021-1 20209307 《Linux内核原理与分析》第九周作业
这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)> 这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第九周作业> 这个作业的目标 & ...
- 2019-2020-1 20199329《Linux内核原理与分析》第十三周作业
<Linux内核原理与分析>第十三周作业 一.本周内容概述 通过重现缓冲区溢出攻击来理解漏洞 二.本周学习内容 1.实验简介 注意:实验中命令在 xfce 终端中输入,前面有 $ 的内容为 ...
- 2019-2020-1 20199329《Linux内核原理与分析》第十二周作业
<Linux内核原理与分析>第十二周作业 一.本周内容概述: 通过编程理解 Set-UID 的运行机制与安全问题 完成实验楼上的<SET-UID程序漏洞实验> 二.本周学习内容 ...
随机推荐
- Redis总结(九)Linux环境如何安装redis
以前总结Redis 的一些基本的安装和使用,由于是测试方便,直接用的window 版的reids,并没有讲redis在linux下的安装.今天就补一下Linux环境如何安装redis. 大家可以这这里 ...
- Django+zTree构建组织架构树
树,因其清晰明了的展现形式而被广泛的使用 日常的开发过程中我们需要经常与"树"打交道,例如公司的组织架构树.服务器的项目归属树,管理后台侧边树等等,本篇文章介绍关于树的两个内容 多 ...
- ExecutorService 的理解和使用
前言: 我们之前使用线程的时候都是使用new Thread来进行线程的创建,但是这样会有一些问题.如: a. 每次new Thread新建对象性能差.b. 线程缺乏统一管理,可能无限制新建线程,相互之 ...
- 《Java 8 in Action》Chapter 4:引入流
1. 流简介 流是Java API的新成员,它允许你以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现).就现在来说,你可以把它们看成遍历数据集的高级迭代器.此外,流还可以透明地并行 ...
- odoo通过actions.client进行自定义页面
一.使用原因 由于odoo自带页面在项目开发过程中无法满足使用,需要使用到动作ir.actions.client进行自定义视图的开发,实现自定义的xml视图开发. 二.实现目标 三.开发过程 1.项目 ...
- Redis学习总结(六)--Redis集群伸缩
我们在上一章讲了如何创建集群,今天我们来实现下集群的伸缩. 添加节点 操作流程 1.启动节点 2.将节点加入到集群中 3.将数据槽从原来的节点迁移部分到新节点上 实践 1)准备两个新节点并启动 [ro ...
- Leetcode之回溯法专题-39. 组合总数(Combination Sum)
Leetcode之回溯法专题-39. 组合总数(Combination Sum) 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使 ...
- netcore 中的动态代理与RPC实现(微服务专题)
一.关于RPC的调用 1. 调用者(客户端Client)以本地调用的方式发起调用: 2. Client stub(客户端存根)收到调用后,负责将被调用的方法名.参数等打包编码成特定格式的能进行网络传输 ...
- ubuntu安装elasticsearch及head插件
1.安装elasticsearch,参考http://www.cnblogs.com/hanyinglong/p/5409003.html就可以了 简单描述下: mkdir -p /usr/local ...
- 2019 Multi-University Training Contest 8
2019 Multi-University Training Contest 8 C. Acesrc and Good Numbers 题意 \(f(d,n)\) 表示 1 到 n 中,d 出现的次数 ...