2019-2020-1 20199329《Linux内核原理与分析》第二周作业
《Linux内核原理与分析》第二周作业
一.上周问题总结:
- 未能及时整理笔记
- Linux还需要多用
- markdown格式不熟练
- 发布博客时间超过规定期限
二.本周学习内容:
《庖丁解牛Linux内核分析》第一章
2.1 汇编语言的学习与实践
汇编语言, 即第二代计算机语言,用一些容易理解和记忆的字母,单词来代替一个特定的指令,比如:用“ADD”代表数字逻辑上的加减,“ MOV”代表数据传递等等,通过这种方法,人们很容易去阅读已经完成的程序或者理解程序正在执行的功能,对现有程序的bug修复以及运营维护都变得更加简单方便。
在实验楼配套实验1中,我们使用vim编辑器编辑main.c程序,代码如下:
int g(int x)
{
return x + 3;
}
int f(int x)
{
return g(x);
}
int main(void)
{
return f(8) + 1;
}
在“实验楼”的虚拟机环境下粘贴代码并保存:

编译main.c代码文件,查看程序返回值,再将其编译成以“.s”作为扩展名的汇编代码文件,代码如下:
#编译C语言代码文件
gcc main.c
#执行a.out可执行文件
./a.out
#输出程序返回值
echo $?
#将c语言程序编译为main.s汇编文件
gcc –S –o main.s main.c -m32
#用vi方式打开汇编文件
vi main.s
具体效果如下:

打开后的源码非常繁冗且复杂:

#在命令模式下取除"."开头的辅助信息
g/\.s*/d
简化后的清爽代码如下:

2.2 云班课视频《计算机是如何工作》
这部分课程主要涉及到了冯诺依曼体系结构,或称为存储程序计算机、从硬件角度和程序员的角度对计算机中内存与CPU之间关系的理解、API——程序与计算机的接口界面、ABI——程序与CPU的接口界面、16位和32位以及64位的X86体系结构的寄存器,其中印象最深的是堆栈指针、段寄存器和EIP等。
- 通用寄存器
EAX:累加器
EBX:基地址寄存器
ECX:计数寄存器
EDX:数据寄存器
EBP:堆栈基址针
ESI、EDI:变址寄存器
ESP:堆栈顶指针 - 段寄存器
CS:代码段寄存器。
DS:数据段寄存器。
ES:附加段寄存器。
SS:堆栈段寄存器。
FS:附加段寄存器。
GS:附加段寄存器。 - mov指令及寻址方式,其中l指32位,b指8位,w指16位,q指64位,如下表展示:
| 指令 | 相当于 | 寻址方式 |
|---|---|---|
| movl %eax %edx | edx=eax | 寄存器寻址,以%开头的寄存器标识符 |
| movl $0x123 %edx | edx=0x123 | 立即寻址,立即数以$开头的数值 |
| movl $0x123 %edx | edx=*(int32_t)0x123 | 直接寻址,直接访问一个指定的内存地址的数据 |
| movl (%ebx)%edx | edx=(int32_t)ebx | 间接寻址,将寄存器的值作为一个内存地址来访问内存 |
| movl 4(%ebx)%edx | edx=(int32_t)(ebx+4) | 变址寻址,在间接寻址之时改变寄存器的数值 |
三.总结与疑难
本次Linux学习主要学习了计算机冯·诺依曼体系结构、计算机CPU工作原理以及汇编语言执行过程中堆栈的变化情况,了解到寄存器的分类,以及寄存器的用处.学习了一些底层的调用。学会了如何将C语言转化为汇编语言。
QUSTION:
- 对于堆栈指针,在本科数据结构课程的时候已经有过相关的编程与实践,但是却没有真正在汇编中进行过相关的操作,关于汇编代码的工作栈分析看得还不透彻
- 工作栈变化状态图因时间原因还未完成
- 按照课本步骤,在保存并退出文本编辑器时候,按“shift”+“:”,并不能进入命令模式。后询问同学,发现需要先按esc退出编辑模式
四.下周计划安排
- [ ] Linux还要多用,下周得配置好电脑环境与虚拟机,摆脱实验楼
- [ ] 完成书本上的课后习题
- [ ] 补完汇编代码的工作栈分析图
2019 年 09月 22日
2019-2020-1 20199329《Linux内核原理与分析》第二周作业的更多相关文章
- 2019-2020-1 20199303<Linux内核原理与分析>第二周作业
2019-2020-1 20199303第二周作业 1.汇编与寄存器的学习 寄存器是中央处理器内的组成部份.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和位址.在中央处理器的控制部件中 ...
- 20169219 linux内核原理与分析第二周作业
"linux内核分析"的第一讲主要讲了计算机的体系结构,和各寄存器之间对数据的处理过程. 通用寄存器 AX:累加器 BX:基地址寄存器 CX:计数寄存器 DX:数据寄存器 BP:堆 ...
- 2019-2020-1 20199314 <Linux内核原理与分析>第二周作业
1.基础学习内容 1.1 冯诺依曼体系结构 计算机由控制器.运算器.存储器.输入设备.输出设备五部分组成. 1.1.1 冯诺依曼计算机特点 (1)采用存储程序方式,指令和数据不加区别混合存储在同一个存 ...
- Linux内核原理与分析-第二周作业
写之前回看了一遍秒速五厘米:如果
- Linux内核原理与分析-第一周作业
本科期间,学校开设过linux相关的课程,当时的学习方式主要以课堂听授为主.虽然老师也提供了相关的学习教材跟参考材料,但是整体学下来感觉收获并不是太大,现在回想起来,主要还是由于自己课下没有及时动手实 ...
- 2019-2020-1 20199314 <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程序漏洞实验> 二.本周学习内容 ...
随机推荐
- 手工注入——MySQL手工注入实战和分析
今天进行了MySQL手工注入实战,分享一下自己的实战过程和总结,这里环境使用的是墨者学院的在线靶场.话不多说,咱们直接开始. 第一步,判断注入点 通过 ' 和构造 and 1=1 和 and 1=2 ...
- 多源第k短路 (ford + 重新定义编号) / 出发点、终点确定的第k短路 (Spfa+ 启发搜索)
第k短路 Description 一天,HighLights实在是闲的不行,他选取了n个地点,n各地点之间共有m条路径,他想找到这m条路径组成的第k短路,你能帮助他嘛? Input 第一行三个正整数, ...
- 解决浏览器看不到Flash文档(尤其某慕课)
最近遇到很多朋友说浏览器看不到网课资源的文档等等,就顺手写一篇说一下情况 为什么会文档空白 某课网站上面的文档是用flash进行展示的,同时flash被很多浏览器逐步抛弃(快凉了,都是H5了) fla ...
- SWUST OJ 1075 求最小生成树(Prim算法)
求最小生成树(Prim算法) 我对提示代码做了简要分析,提示代码大致写了以下几个内容 给了几个基础的工具,邻接表记录图的一个的结构体,记录Prim算法中最近的边的结构体,记录目标边的结构体(始末点,值 ...
- 深入解读ES6系列(四)
来自老曾es6的前言: 哈喽小伙伴们,爱说'废'话的Z又回来了,欢迎来到Super IT曾的博客时间,上一节说了字符串,面向对象以及json的知识,这一节我们继续我们知识的海洋,一起奋斗不秃头!不足的 ...
- 【数据库测试工具】认识Sysbench
本文基于课堂PPT笔记整理,主要介绍一下Sysbench及其简单使用,实验代码部分在代码中有重点注释,不另作说明. 一,基准测试 什么是数据库的基准测试? 数据库的基准测试是对数据库的性能指标进行定量 ...
- node.js代码
// 1. 引入 express var express = require('express'); var formidable = require('formidable'); var mysql ...
- django、celery异步发邮件
django.celery异步发邮件 django自带的send_mail发邮件功能执行发邮件功能会因为网络的原因造成花费的时间过长,为了解决这个问题,可以用celery + redis代替 安装包: ...
- MySQL入门,第四部分,学会创建、删除表
一.列完整性约束 列完整性约束:是指对某一列设置的约束条件.该列上的数据必须满足.最常见的有: NOT NULL 该列值不能为空 NULL 该列值可以为空 UNIQUE 该列值不能存在相同 DEFA ...
- NS网络仿真,小白起步版,模拟仿真之间注意的事项
FTP是基于TCP的,所以FTP应用不可以绑定UDP发送代理 FTP和CBR属于应用流,他们用来绑定TCP和UDP发送代理 TCP用于发送代理时,接收代理为TCPSink,可以绑定FTP应用.CBR流 ...