2019-2020-1 20199326《Linux内核原理与分析》第二周作业
本周总结:本周的学习内容主要是庖丁解牛Linux的第一章,然后看完书后,又跟着云班课加深学习了一下第一章的内容。第一章主要讲述了linux里的汇编指令的一些指令,比如movl,pushl,popl等等,这些指令都是围绕数据结构中的栈做文章的。贯穿这一章的是esp、ebp,eip指针寄存器。简单来说,ebp就是指的栈底,esp就是指着栈顶。eip就是正在执行的指令所在的位置,然后不断重复的进行入栈出栈操作。
C语言程序:
int g(int x)
{
return x + 3;
}
int f(int x)
{
return g(x);
}
int main(void)
{
return f(8) + 1;
}
汇编去除无关项后:
g:
1 pushl %ebp
2 movl %esp, %ebp
3 movl 8(%ebp), %eax
4 addl $3, %eax
5 popl %ebp
6 ret
f:
7 pushl %ebp
8 movl %esp, %ebp
9 subl $4, %esp
10 movl 8(%ebp), %eax
11 movl %eax, (%esp)
12 call g
13 leave
14 ret
main:
15 pushl %ebp
16 movl %esp, %ebp
17 subl $4, %esp
18 movl $8, (%esp)
19 call f
20 addl $1, %eax
21 leave
22 ret
ret指令等价于
popl %eip
call指令等价于
pushl %eip
movl f %eip
leave指令等价于
movl %ebp,%esp
popl %ebp
解析:
程序从15那里开始执行,此时,ebp和esp均指向栈底,标号为0,第15行,ebp 0进栈,esp-4,第16行,ebp-4,此时ebp与esp指向同一处,17行,esp再减4,18行,将立即数8存到栈里,即esp所指的位置,19行,执行call命令,将eip 20存入栈里,此时esp指向栈顶,进入f函数,7,8行过后,ebp和esp均指向栈顶,9行,esp-4,第10行,将ebp+8所在位置的立即数8存到eax里,第11行,将eax里的值8放到esp所指的位置,第12行,将eip 13存入栈里,执行g函数,经过前两步,esp,ebp均指向栈顶,第3行,将ebp+8所指未知的数8存入eax里,然后eax+3=11,第5行,ebp出栈,esp-4,ebp指针回退到上次ebp指针所指位置,然后ret,eip 13出栈,esp-4,继续执行第13行命令,然后ebp再出栈,ebp指针回退到上次ebp指针所指位置,然后第14行ret,eip 20出栈,esp-4,执行第20行命令,ebp再出栈,eax+1=12,然后leave,ret后返回值12
2019-2020-1 20199326《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程序漏洞实验> 二.本周学习内容 ...
随机推荐
- LayUI制作日历工作记录簿
标题不知道该如何取,大概就是用Lay UI的Table,制作一个日历,在日历上可以添加每天的工作简记录.记录下LayUI Table的一些用法,一些值得探索的地方在于日历生成后,给周末加背景色,当天加 ...
- 手工注入——access手工注入实战和分析
今天进行了access手工注入,下面是我的实战过程和总结. 实战环境使用的是墨者学院的在线靶场.下面咱们直接进入主题. 第一步,判断注入点 通过‘ 或者 and 1=1 和 and 1=2 是否报错, ...
- 性能测试环境搭建:XAMPP1.8+PHPwind9.0安装教程
1.安装准备 1.1软件版本 XAMPP的版本:XAMPP 1.8.2 phpwind的版本:PHPWind 9.0 1.2.安装环境 我的环境:win10 其实安装环境影响不大,win7,win ...
- 最大子矩阵hdu1559(二维前缀和)
最大子矩阵hdu1559 Problem Description 给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大. Input 输入数据的第一行为一个正整数T,表示有 ...
- UITextField - 为正文设置缩进
实现思路: 把UITextField的leftView当做填充位置,这样就实现了文字偏移. 代码: UILabel *label = [[[UILabelalloc] initWithFrame:CG ...
- 1007 Maximum Subsequence Sum (25 分)
1007 Maximum Subsequence Sum (25 分) Given a sequence of K integers { N1, N2, ..., NK }. A ...
- CPU、内存、硬盘、指令之间的关系
我们都知道所有的程序最终都是一系列计算机能够识别的指令和数据,通过执行这些指令来控制整个计算机. 而CPU就是负责读取和解释执行这些指令的,CPU主要包括运算器.控制器和寄存器,控制器负责把指令.数据 ...
- PTA | 1005 继续(3n+1)猜想 (25分)
卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对 n=3 进行验证的时 ...
- 【数据库】MySQL数据库(三)
一.MySQL当中的索引: 数组当中我们见过索引:它的好处就是能够快速的通过下标.索引将一个信息查到:或者说 能够快速的定位到一个信息: 1.MySQL中的索引是什么? 它是将我们表中具有索引的那个字 ...
- JAVA自动化之Junit单元测试框架详解
一.JUnit概述&配置 1.Junit是什么? Junit是一个Java 编程语言的开源测试框架,用于编写和运行测试.官网 地址:https://junit.org/junit4/ 2.Ma ...