linux内核分析1--反汇编分析
来源:互联网 发布:泛微java怎么样 编辑:程序博客网 时间:2024/05/18 18:16
“Linux内核分析”实验报告
通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的原c语言代码如下:
int g(int x){ return x + 15;}int f(int x){ return g(x);}int main(void){ return f(10) + 1;}
将main.c文件编译成汇编文件:
实验结果
通过汇编,得到的mian.s文件:
删除文件中的解释信息(.开头的),得到的汇编语句:
首先代码从main函数开始执行。
首先通过第一个压栈操作,把栈的基地址压倒内存中,比如此时的基地址是2000,那么esp地址减去4,地址为1996,里面存的内容为2000。
后面两个操作是让ebp指向esp(地址1996),然后再让esp地址减4,也就是esp地址为1992。
然后调用f函数,在内存中存下eip=23(也就是存入call f这个指令的下一个条指令),此时esp地址为1988
在函数f中,先把这个时候基地址1996压入栈中,esp为1984;移动edp指向esp的位置1984;执行第11行指令,esp地址为1980;执行第12行指令,寄存器eax的值为变址操作ebp地址1988+8=1996处的值10,即eax值为10。执行第13行代码,把eax的值赋值给esp所在位置的内存,即1980处的地址为10。此刻调用g函数,esp减4位1976,并让此地址存eip=15。
在g函数中,如同前面f类似,让存ebp地址,移动esp,变址ebp赋值15+10给eax,此刻ebp地址为1972,esp地址为1972。执行第6行代码,把esp中的1984赋给ebp,esp+4为1976。执行第7行代码ret,弹出eip=15,esp+4为1980。执行第15行代码,esp指向ebp为1984,并把1996弹出给ebp,esp+4=1988。执行第16行代码,eip=23,esp+4=1992。eax+1=>eax=26。执行第24行代码,esp指向ebp的1996,弹出2000使得ebp=2000。执行第25行代码,弹出2000存的eip给上一级,然后esp+4=2000。代码执行完毕。
从以上例子,我认为多任务执行和单任务类似,都是在内存中压栈,然后弹出,可能通过一些id来区分eip之类的,来保证多任务执行不会相互干扰。
“Linux内核分析”实验报告
通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的原c语言代码如下:
int g(int x){ return x + 15;}int f(int x){ return g(x);}int main(void){ return f(10) + 1;}
将main.c文件编译成汇编文件:
实验结果
通过汇编,得到的mian.s文件:
删除文件中的解释信息(.开头的),得到的汇编语句:
首先代码从main函数开始执行。
首先通过第一个压栈操作,把栈的基地址压倒内存中,比如此时的基地址是2000,那么esp地址减去4,地址为1996,里面存的内容为2000。
后面两个操作是让ebp指向esp(地址1996),然后再让esp地址减4,也就是esp地址为1992。
然后调用f函数,在内存中存下eip=23(也就是存入call f这个指令的下一个条指令),此时esp地址为1988
在函数f中,先把这个时候基地址1996压入栈中,esp为1984;移动edp指向esp的位置1984;执行第11行指令,esp地址为1980;执行第12行指令,寄存器eax的值为变址操作ebp地址1988+8=1996处的值10,即eax值为10。执行第13行代码,把eax的值赋值给esp所在位置的内存,即1980处的地址为10。此刻调用g函数,esp减4位1976,并让此地址存eip=15。
在g函数中,如同前面f类似,让存ebp地址,移动esp,变址ebp赋值15+10给eax,此刻ebp地址为1972,esp地址为1972。执行第6行代码,把esp中的1984赋给ebp,esp+4为1976。执行第7行代码ret,弹出eip=15,esp+4为1980。执行第15行代码,esp指向ebp为1984,并把1996弹出给ebp,esp+4=1988。执行第16行代码,eip=23,esp+4=1992。eax+1=>eax=26。执行第24行代码,esp指向ebp的1996,弹出2000使得ebp=2000。执行第25行代码,弹出2000存的eip给上一级,然后esp+4=2000。代码执行完毕。
从以上例子,我认为多任务执行和单任务类似,都是在内存中压栈,然后弹出,可能通过一些id来区分eip之类的,来保证多任务执行不会相互干扰。
这是实验楼的linux内核分析课程地址:https://www.shiyanlou.com/courses/195
- linux内核分析1--反汇编分析
- Linux内核分析-1/反汇编(堆栈)
- Linux内核分析 学习笔记之反汇编分析
- Linux内核分析【1】--分析汇编代码
- linux内核分析——简单代码反汇编为汇编代码分析
- 第1节 反汇编一个简单的C程序【Linux内核分析】
- Linux内核分析-反汇编一个简单的C程序并简单分析
- Linux内核分析——分析C程序的反汇编内容
- 《Linux内核分析》(一)——反汇编一个简单的C程序并分析其汇编代码的执行
- 《linux内核分析》作业一:反汇编一个C语言程序并分析汇编代码执行过程
- Gloomy对Windows内核的分析(内核反汇编技术)
- Gloomy对Windows内核的分析(内核反汇编技术)
- Gloomy对Windows内核的分析(内核反汇编技术)
- Linux内核分析MOOC课程汇编分析
- ARM Linux内核驱动异常定位方法分析--反汇编方式
- ARM Linux内核驱动异常定位方法分析--反汇编方式
- ARM Linux内核驱动异常定位方法分析--反汇编方式
- ARM Linux内核驱动异常定位方法分析--反汇编方式
- 文章标题
- 今天收到阿里巴巴一个电话面试
- babel-plugin-import不生效的问题
- [二进制分组 dsu on tree 二次函数] Codechef KILLER Painting Tree
- C++上机实验五——数组1
- linux内核分析1--反汇编分析
- 浅谈动态代理
- DFS的两种非递归的实现方法
- 图像处理与识别学习小结
- 吴恩达2014机器学习TIPS记录(第一周至第六周)
- 微服务学习笔记一:Spring Cloud简介
- App移动端项目管理
- 人脸特征提取DeepID 1.0深度网络解读
- 算法--基础算法问题