“Linux内核分析”实验报告
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内核分析”实验报告的更多相关文章
- Linux内核分析实验六
Linux内核分析实验六 进程控制块PCB——task_struct(进程描述符) 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息. struct task_s ...
- 【MOOC EXP】Linux内核分析实验八报告
程涵 原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 进程的切换和系统的一般执行过程 知识点 ...
- 【MOOC EXP】Linux内核分析实验七报告
程涵 原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 可执行程序的装载 知识点梳理 一.预处 ...
- 【MOOC EXP】Linux内核分析实验六报告
程涵 原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 进程的描述和进程的创建 知识点梳理: ...
- “Linux内核分析”实验一报告
张文俊 + 原创作品转载请注明出处 + <Linux 内核分析> MOOC 课程 实验要求: 1.总结部分要求阐明自己对“计算机是如何工作的”理解: 2.博客中需要使用实验截图: 实验内容 ...
- “Linux内核分析”实验二报告
张文俊 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.第二周学习内 ...
- “Linux内核分析”实验三报告
构造一个简单的Linux系统 张文俊+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-10000290 ...
- 【MOOC EXP】Linux内核分析实验一报告
程涵 原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 [反汇编一个简单的C程序] 实验 ...
- 【MOOC EXP】Linux内核分析实验二报告
程涵 原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 [操作系统是如何工作的] 教学内 ...
随机推荐
- 通过logstash过滤、分析日志数据
logstash是怎么工作的呢? Logstash是一个开源的.服务端的数据处理pipeline(管道),它可以接收多个源的数据.然后对它们进行转换.最终将它们发送到指定类型的目的地.Logstash ...
- Activity启动模式 Tasks和Back Stack
http://www.cnblogs.com/mengdd/archive/2013/06/13/3134380.html Task是用户在进行某项工作时需要与之交互的一系列activities的集合 ...
- UVA806-Spatial Structures(四分树)
Problem UVA806-Spatial Structures Accept:329 Submit:2778 Time Limit: 3000 mSec Problem Description ...
- (2)HomeAssistant 参数配置
如果你希望使用其它目录作为配置文件所在地,可以使用以下命令启动home assistant:hass --config path/to/config 在配置目录下,有一个文件configuration ...
- Oracle 批量生成sys_guid()
select sys_guid() from dual connect by rownum<10
- Shell逻辑语句
case esac 语句 参考 :https://blog.csdn.net/wu20093346/article/details/47210809 case ... esac 与其他语言中的 swi ...
- <操作系统>内存管理
单道程序设计:内存被划分为两部分:一部分供操作系统使用,另一部分供当前正在执行的程序使用. 多道程序设计:内存中进一步细分用户部分,以满足多个进程的要求. 内存管理的需求: 重定位:程序从磁盘换入内存 ...
- Java并发(三)线程池原理
Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池.在开发过程中,合理地使用线程池能够带来3个好处. 1. 降低资源消耗.通过重复利用已创建的线程降低线程 ...
- 【USACO 2019 Feburary Contest】Gold
模拟二月金组,三个半小时AK. USACO 2019 Feburary Contest, Gold T1 题意:给定一棵树,每个点有点权,每次可以进行以下操作之一: 更改一个点的点权 求某条路径上的点 ...
- ubuntu 用remastersys 备份系统并且安装
sudo add-apt-repository ppa:mutse-young/remastersys 2.更新系统软件源 sudo apt-get update 3.更新完了,先安装remaster ...