2020-2021-1 20209312《Linux内核原理与分析》第二周作业
一 、冯·诺依曼计算机以及寄存器的操作指令
1.冯·诺伊曼计算机的结构
2.寄存器
二、关于实验
1.实验的代码片段
2.汇编代码 通过main.s查看
3.整理过后的汇编程序
4.shell操作
关于实验的代码操作 没有什么问题 下面是对了解不够透彻的堆栈操作进行说明
5.main函数
将ebp的值=100压栈,ebp->100,esp->96
将esp的值赋给ebp,ebp->96,esp->96
esp值减4,ebp->96,esp->92
将7赋给esp当前所指位置
保存当前eip的值(23行),将函数 f 的第一条指令地址(9行)赋给eip,ebp->96,esp->88
eax+11=13+11=24(接着后面的结果)
将ebp的值赋给esp,ebp->96,esp->96,数据出栈,ebp->100,esp->100
6.f函数
将当前ebp的值压栈,ebp->96,esp->88
将esp的值赋给ebp,ebp->88,esp->88
将esp的值减4,ebp->88,esp->84
将ebp+8后地址内所指数据(3)赋给eax,eax=3
将eax=3赋给esp当前所指位置
保存当前eip的值(15行),将函数shu第一条指令的地址(2行)赋给eip,esp减4,ebp->84,esp->76
7.f函数
将ebp的值压栈,ebp->84,esp->76
将esp的值赋给ebp,ebp->72,esp->72
将ebp+8后地址内所指数据(3)赋给eax,eax=3
eax+1=3+10=13
数据出栈,将当前esp所指地址内的数据赋给ebp,esp加4,ebp->84,esp->76
返回第15行指令,ebp->84,esp->88
三、总结
通过对诺曼依体系结构的了解,加深对计算机工作的理解,通过分析汇编程序对x86指令的了解也更加深入。通过这次的学习还有实验,让我更加理解了mov,add,sub,leave,ret……这些指令用法以及对栈的影响,还了解了实验楼的用法。希望在以后的学习中能越用越熟练,学习到更多的知识。
注:
寄存器寻址:movl %eax,%edx 相当于edx=eax
立即寻址:movl $0x123,%edx 相当于edx=0x123
直接寻址:movl 0x123,%edx 相当于*(int*)0x123
间接寻址:movl (%ebx),%edx 相当于edx=*(int*)ebx
变址寻址:movl 4(%ebx),%edx相当于edx=*(int*)(ebx+4)
eax为累加寄存器,ebx为基址寄存器,ecx计数寄存器,edx数据寄存器
储存指令的寄存器eip,和堆栈的指针寄存器esp,ebp。
posted on 2020-10-18 14:38 20209312-张伟国 阅读(190) 评论(1) 编辑 收藏 举报