第二周作业
目录
一、上周遗留问题
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的下一条指令。