2019-2020-1 20199302《Linux内核原理与分析》第二周作业
一、实验记录
1、实验代码截屏

本次实验中遇到的一个小问题是:
(1)在进行汇编语言编译时,命令行本应是"g/.s*/d ",因为做实验的时候还没有看视频,只是看了书,把"/ "当成了“^",在这里,需要用转义字符。
(2)其中,:g/pattern/d表示全局删除匹配到的行。
二、《庖丁解牛Linux内核分析》第一章学习
(一)注意
1、堆栈是向下增长的,地址在减小,需要与栈进行区分。
2、SP栈顶指针寄存器,BP栈底指针寄存器。SP总是指向栈顶,BP指向的是当前函数堆栈的栈底。
(二)call指令的学习(以32位为例):
在刚开始看到课本的第10页call指令的两条伪指令时,以为应该把改变后的EIP中的值压栈,直到看完整章内容,才知道call指令的含义。
两条伪指令为(实际上,IP不可通过pushl以及movl指令所修改):
pushl %eip
movl $0×12345,%eip
call指令的含义是:先将调用函数前应该执行的指令地址压栈,等所调用函数执行完毕,便于回到main函数;然后将被调用函数的第一条指令地址放入EIP。
(三)enter指令的学习(以32位为例)
enter指令用于建立函数堆栈,等价于:
pushl %ebp
movl %esp,%ebp
首先将栈底指针寄存器压栈,记录本函数的栈底。然后重新将EBP赋值为新进入函数的栈底。
(四)leave指令的学习(以32位为例)
leave指令用于撤销函数堆栈,等价于:
movl %ebp,%esp
popl %ebp
撤销函数堆栈,将ESP赋值为EBP,然后将EBP出栈。
经过查看实验中的汇编代码,g函数中没有使用leave,而f函数中使用了leave指令,那么,什么时候要用leave,什么时候用ret?
汇编文件:
g:
pushl %ebp
movl %esp,%ebp
movl 8 (%ebp),%eax
addl $3,%eax
popl %ebp
ret
f:
pushl %ebp
movl %esp,%ebp
subl $4 %esp
movl 8(%ebp),%eax
movl %eax,(%esp)
call g
leave
ret
main:
pushl %ebp
movl %esp,%ebp
subl $4, %esp
movl $8,(%esp)
call f
addl $1,%eax
leave
ret
查阅资料发现:
二者的差别就在于是否使用 movl %ebp, %esp。
这句的作用是用来恢复堆栈的栈顶指针,堆栈的栈顶指针没有变化的时候,就可以不用恢复,直接使用popl指令了。
2019-2020-1 20199302《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程序漏洞实验> 二.本周学习内容 ...
随机推荐
- Django中的admin
1.基本知识 在用Django框架写了一个网站之后,我们添加数据大概有两种方式: 1.在连接的数据库中添加数据 2.登录admin,进入后台添加数据 创建一个Django项目后,我们在url.py中会 ...
- Scrapy框架——介绍、安装、命令行创建,启动、项目目录结构介绍、Spiders文件夹详解(包括去重规则)、Selectors解析页面、Items、pipelines(自定义pipeline)、下载中间件(Downloader Middleware)、爬虫中间件、信号
一 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Scrapy的用途十分广泛,可 ...
- git比较本地仓库和远程仓库的差异(转)
转自:https://www.jianshu.com/p/6078a49900a4
- Asp.netMVC中Ajax.BeginForm上传文件
做一个上传并解压的功能,解压完了回调,解压多少文件.搞了半天用Ajax.BeginForm.各种坑,后来直接放弃 @using (Ajax.BeginForm("UploadFile&quo ...
- wpf Log4net的配置和使用
现在项目涉及的是cs客户端,在项目中使用log4net记录本地日志和异常信息,这里项目做完了,想着自己做一个demo,测试记录一下log4Net的配置使用. 第一步.新建一个wpf应用程序,项目右键 ...
- C#获取汉字拼音和首字母
C#获取汉字拼音和首字母 引入NPinyin using NPinyin; 调用 /// <summary> /// 中文首字母大写 /// </summary> /// &l ...
- OO——JML作业总结
目录 第三单元博客作业 JML语言理论基础 1.注释结构 2.JML表达式 3.方法规格 4.类型规格 应用工具链 JMLUnitNG使用实例 作业架构设计 第一次作业 第二次作业 第三次作业 BUG ...
- dubbo源码阅读之服务目录
服务目录 服务目录对应的接口是Directory,这个接口里主要的方法是 List<Invoker<T>> list(Invocation invocation) throws ...
- it commit提示Your branch is up-to-date with 'origin/master'.
今天提交git仓库的时候,遇到了如截图所示的问题,提示Your branch is up-to-date with 'origin/master'. 查了些资料后,发现其根本原因是版本分支的问题 这时 ...
- 浮动和渐变色,定位position,元素的层叠顺序
浮动: float 是我们网页布局的一种 浮动 可以有 left 左浮动 right 右浮动 两种 浮动的特点: 脱离正常的文档流,原本的空间不占据,浮动的标签都具有块级标签的一些特点,可以手动设置宽 ...