Linux内核分析:实验一

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

计算机体系结构与程序运行过程

现代计算机大都采用的是“冯.诺依曼”体系结构,它的核心思想是:程序存储,指令和数据不加区分的放在一个存储器中。由指令指针寄存器保存着下一条将要执行指令的地址,这个寄存器在32位系统中叫eip,64位系统中叫rip。

指令是用二进制编码的,难于记忆。为了更有效的编写程序,人们就发明了汇编语言,它是对二进制指令的一种简单映射。平常我们所写的程序都需要编译成二进制,才能被机器执行。

实验截图:

1.开始的截图

2.mian.s的代码

3.反汇编代码

代码分析:

从main函数开始:

pushl %ebp movl %esp, %ebp

这两条指令的意思是保存栈基指针的内容,然后把栈顶指针拷贝给栈基指针。也就是把栈基指针压栈,然后使栈基指针指向栈顶指针。

这样做使得函数保存了调用之钱的状态信息,便于函数返回。函数调用堆栈逻辑上是由多个堆栈叠加起来的。

subl $4, %esp movl $23, (%esp)

这两条指令的意思是栈顶指针下以4个单位,分配了一个单元,第二条指令将数值23存储到刚刚分配的个单元中。

所以这两条指令的作用是将数值23压入堆栈。

call f

这是一条函数调用指令。call f调用f函数,首先把指令指针寄存器EIP的内容(即下一条指令的位置)保存到堆栈中,然后把函数f函数的起始地址拷贝给EIP寄存器。

pushl %ebp

movl %esp, %ebp

subl $4, %esp

movl 8(%ebp), %eax

movl %eax, (%esp)

call g 现在执行的是f函数。前两条指令和main中的前两条指令含义相同。对于第4条指令指汇编程序的变址寻址方式,

它的含义是将栈基指针的内容加上8对应的存储单元(即23所在的存储单元)的内容传送给累加寄存器EAX。下一条指令再把EAX内容拷贝给栈顶指针所指的位置。

call g调用g函数。

popl %ebp

这条指令相当于:movl (%esp),%ebp add $4,%esp。

实现将之前压入栈的栈基指针EBP的内容出栈到EBP中。

Leave:恢复堆栈状态

ret返回

总结:通过分析C程序的反汇编代码,对程序在计算内部的执行过程有了一个直观的认识,在函数调用中,栈起了举足轻重的作用,

整个程序的运行过程其实就是每次从 eip 指向的地址取出一条指令执行,然后eip自增很多计算机安全方面的漏洞都直接间接的利用了栈。

“Linux内核分析”实验报告的更多相关文章

  1. Linux内核分析实验六

    Linux内核分析实验六 进程控制块PCB——task_struct(进程描述符) 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息. struct task_s ...

  2. 【MOOC EXP】Linux内核分析实验八报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 进程的切换和系统的一般执行过程 知识点 ...

  3. 【MOOC EXP】Linux内核分析实验七报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 可执行程序的装载 知识点梳理 一.预处 ...

  4. 【MOOC EXP】Linux内核分析实验六报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 进程的描述和进程的创建 知识点梳理: ...

  5. “Linux内核分析”实验一报告

    张文俊 + 原创作品转载请注明出处 + <Linux 内核分析> MOOC 课程 实验要求: 1.总结部分要求阐明自己对“计算机是如何工作的”理解: 2.博客中需要使用实验截图: 实验内容 ...

  6. “Linux内核分析”实验二报告

    张文俊 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.第二周学习内 ...

  7. “Linux内核分析”实验三报告

    构造一个简单的Linux系统 张文俊+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-10000290 ...

  8. 【MOOC EXP】Linux内核分析实验一报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000  [反汇编一个简单的C程序]   实验 ...

  9. 【MOOC EXP】Linux内核分析实验二报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000  [操作系统是如何工作的]   教学内 ...

随机推荐

  1. 改变javascript函数内部this指针指向的三种方法

    在查了大量的资料后,我总结了下面的三条规则,这三条规则,已经可以解决目前我所遇到的所有问题.规则0:函数本身是一个特殊类型,大多数时候,可以认为是一个变量. function a() { alert( ...

  2. 【Beta Scrum】冲刺! 1/5

    0. Alpha阶段遗留问题 项目 功能/页面 功能/页面 WEB端 图片在线编辑 文件上传跨域问题 app端 作业展示页面 1. Beta计划表 功能 说明 web端 登录 完成web端登录页面及功 ...

  3. log4j2 yml

    1.log4j2默认加载文件为log4j2.xml 2.要使用yml加载需添加依赖 <!-- https://mvnrepository.com/artifact/com.fasterxml.j ...

  4. vue 如何在循环中绑定v-model

    vue 如何在循环中绑定v-model 我现在有这么一个需求,页面上有多项输入框,但是具体有多少项,我也不知道,它是通过"新增一项"按钮点击事件,点击一下,就新增一项:如下图这个样 ...

  5. PAT A1013 Battle Over Cities (25 分)——图遍历,联通块个数

    It is vitally important to have all the cities connected by highways in a war. If a city is occupied ...

  6. python线程和进程编程对比

    import timefrom concurrent.futures import ThreadPoolExecutor,as_completedfrom concurrent.futures imp ...

  7. ESP32 ADC

    2个12位的ADC,共计18通道,ADC2比较特殊的一点就是:ADC2和wifi共用,wifi的优先级更高,所以ADC2只有在WIFI模块不用的情况下好使: 在读取ADC数据之前,必须先对ADC进行设 ...

  8. LOJ564 613的天网 构造

    题目传送门 题意:给出一个$N \times N \times N$的方块,你可以在每一个$1 \times 1 \times 1的方块上放上一个摄像头,摄像头的监视范围为6个方向的无限远距离.问最少 ...

  9. 学习ML.NET(3): 导入数据集

    机器学习算法需要作用于数据,用来训练算法模型.数据集通常是以纯文本文件存储的表格数据,文件的每一行是一条数据记录,每条记录由多列组成,列之间用分隔符(一般是逗号,)分开,例如前面用到过的鸢尾花数据集. ...

  10. springboot @Value 获取计算机中绝对路径文件的内容

    默认情况下使用 @Value("aaa.txt") private Resource txtResource; 这样获取到的是项目classpath 下的 aaa.txt 如果想获 ...