2020-2021-1 20209302毕慧敏《Linux内核原理与分析》第二周作业

一、上周遗留问题:parallels下ubantu显示分辨率不能全屏。

解决办法:在终端输入

sudo diagnose

输入密码,弹出设置框,将debug下的三个选项全部勾选,然后选择“应用”。完成后关闭设置框。

然后输入reboot重启虚拟机。在设置里进行设置就行了。

二、本周实验

 

 

 

 

 

 

 

 

 

三、实验分析

 

 

四、本周学习及问题解决

1.寄存器名称:

EAX累加器

EBX基地址寄存器

ECX计数寄存器

EDX数据寄存器

ESI EDI变址寄存器

ESP堆栈顶指针

2:间接寻址movl (%ebx),  %edx edx=*(int 32_t*)ebx的理解:

(%ebx)表示寄存器ebx的内存地址储存的数据

(int 32_t*)ebx表示将ebx中的数值强制转化为32位的指针

*()的作用是取值

整条语句的意思是将寄存器ebx地址里储存的数据转化成32进制的指针,再提取指针的值赋给寄存器edx

3.对栈底栈顶的区别和add sub的进出方向模糊

解决:查找数据结构相关知识,理解压栈的意义。初始状态下栈空,压栈sub向下是栈增长,add是向上栈收缩。

4.pushl $8的理解

b,w,l,q分别表示8位,16位,32位和64位。

所以pushl $8包含两个指令(1)subl $4, %esp(2)movl %eax,(%esp)

栈顶向下移动四个单位,把立即数8放入栈顶。

由于l代表32位,所以每个单元是4字节是固定的。

5.call指令是函数调用,其调用的是一个地址。

6.为什么ret后会执行call的下一条指令

因为call 0x12345表示将当前的eip给压栈,然后把0x12345这个立即数放进eip里,ret之后,eip回到执行call调用之前的状态,所以会执行call的下一条指令。

 

posted @ 2020-10-18 00:28  20209302毕慧敏  阅读(18)  评论(2编辑  收藏