热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《linux内核分析》第一次课实验作业

解释main.c的汇编码的堆栈变化实验截图如下图所示:下面从main函数开始进行分析(三个可变数值从上到下分别为4,7,4):不妨假设一开始为空栈,初始位置为0,ebpesp,以下

解释main.c的汇编码的堆栈变化

实验截图如下图所示:

技术分享

下面从main函数开始进行分析(三个可变数值从上到下分别为4,7,4):

不妨假设一开始为空栈,初始位置为0,ebp=esp,以下用行号进行标记

18:esp指向位置(1),位置(1)的值为esp的地址

19:使ebp指向与esp相同的地址(位置1)

20:esp指向位置(2)

21:位置(2)的值为7

22:调用f函数(标号):esp指向位置(3),位置(3)的值为eip的地址,将f的地址放到eip中

09:esp指向位置(4),位置(4)的值为ebp的地址

10:使ebp指向与esp相同的地址(位置4)

11:esp指向位置(5)

12:将ebp上移两个位置(位置2)的地址作为eax的地址,eax=7

13:使esp所在位置(位置5)的值为eax的地址

14:调用g函数:esp指向位置(6),位置(6)的值为eip的地址,将g的地址放到eip中

02:esp指向位置(7),位置(7)的值为ebp的地址

03:使ebp指向与esp相同的地址(位置7)

04:将ebp上移两个位置(位置5)的地址作为eax的地址,eax=7

05:eax的值加上4,eax=11

06:ebp指向位置(4),esp指向位置(6)

07:eip重新指向行号15

15:esp指向ebp的地址(位置4),ebp指向位置(1),esp指向位置(3)

16:eip重新指向行号23

23:eax的值加上4,eax=15

24:esp指向ebp的地址(位置1),ebp指向位置(0),esp指向位置(0)

25:eip重新指向main函数调用前中断的地址,运行其他指令

--------------------------------------------------------------------

计算机是如何工作的:

1. 采用冯诺依曼体系结构,CPU通过总线与内存连接,CPU中有IP负责执行语句并移动至下一个指令,内存中存放着具体指令和数据。

2. 寄存器分为通用寄存器和段寄存器,通用寄存器负责记录累加值、基地址、堆栈基地址与顶地址、变址、计数值等,段寄存器负责记录代码段、数据段、附加段和堆栈段。

3. IP指向代码段寄存器,随着逐条执行IP,代码段寄存器(CS)中的指令被一一执行,而CS也可以影响IP的指向,从而更改执行的流程,组成复杂的控制结构。

-------------------------------------------------------------------

c语言文件是如何被编译为汇编语言的:

1. 进入函数

2. 调用子函数,用eax收集函数返回值

3. 执行子函数,将返回值赋值到eax

4. 退出函数

------------------------------------------------------------------

汇编语言与堆栈的关系:

1. enter:在堆栈中记录当前ebp的地址,并将esp的地址下移一位作为函数的私有栈

2. call:将eip按顺序应该执行的地址压栈,并将子函数的地址赋值给eip,从而执行子函数

3. leave:enter的逆动作,将esp的地址赋值为ebp的上一位,并将ebp指向母函数的栈底,表示退出该栈(栈中信息将在下次使用时覆盖)

4. ret:将eip重新定向到当前的栈的地址

其中call和ret成对使用(call在母函数,ret在子函数),enter和leave成对使用(都在同一函数中)

 ————————————————————————————————————————

潘聪 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

《linux内核分析》第一次课 实验作业


推荐阅读
  • FroggerTimeLimit:1000MSMemoryLimit:65536KTotalSubmissions:32257Accepted:10396DescriptionFr ... [详细]
  • 开发网站你需要知晓的部分专用术语
      越来越多的企业和个人都在拥有属于自己的网站门户,首当其冲的就是你得知晓几个网站方面的专业术语,先是中就有好多的客户不明白这些,造成误会是正常的,那不如我们对它有个大致的了解,这样就不容易感觉 ... [详细]
  • 九宫格计算. ... [详细]
  • 3295:[Cqoi2011]动态逆序对Description对于序列A,它的逆序对数定义为满足iAj的数对(i,j)的个数。给1到n的一个排列,按照某种顺序依次删除 ... [详细]
  • 本文分析和介绍了GLo ... [详细]
  • 2019.4.14第1001题:SumProblemProblemDescriptionHey,welcometoHDOJ(HangzhouDianziUniversityOnli ... [详细]
  • Vue项目结构分析-项目结构重点在src文件夹:assets——静态资源,如css,jscomponents——公共组件router——路由文件(vuecli3.x没有自 ... [详细]
  • 22.Container With Most Water(能装最多水的容器)
    thecontainercontainsthemos ... [详细]
  • Git(1)
    安装Git完毕(在开始菜单打开的话,打开的不是你想要的路径,切换路径很麻烦)1.D盘新建GitTest文件夹2.打开GitTest,在空白的地方右键,3.单击GitBashHere ... [详细]
  • python基础(二、pycharm安装、卸载)
    3.在Ubuntu中安装PyCharmPyCharm的官方网站地址是:https:www.jetbrains.compycharm注意:安装时不要使用root用户安装,否则后期使用 ... [详细]
  • 这一篇主要总结一下jQuery这个js在引入的时候做的一些初始化工作第一句window.undefinedwindow.undefined;是为了兼容低版本的IE而写的因为在低版本 ... [详细]
  • spotify engineering culture part 1
    原文,因为原视频说的太快太长,又没有字幕,于是借助youtube,把原文听&打出来了。中文版日后有时间再翻译。oneofthebigsucceessfactorshereatSpo ... [详细]
  • MyBatis模糊查询和多条件查询一、ISmbmsUserDao层根据姓名模糊查询publicListgetUser();多条件查询publicList ... [详细]
  • vscode里的html标签导航的一系列问题
    哈喽,我今天带来的经验是,vscode在18年10月更新后的1.29以后,编辑html文档时,会发现最上面有个类似于HTML标签导航的玩意儿,可能部分同学和我一样不习惯用它们,现在 ... [详细]
  • 抓取百万知乎用户设计之实体设计
    一.实体的关系实体是根据返回的Json数据来设计的教育经历方面用户可以有很多教育经理,USER和education是一对多的关系,一个education对应一个education一 ... [详细]
author-avatar
手机用户2502937497
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有