Linux内核分析1
来源:互联网 发布:明教知乎 编辑:程序博客网 时间:2024/05/22 06:33
实验目的是通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的,深入了解存储程序计算机工作原理
C程序源代码如下
int g(int x){ return x + 2;}int f(int x){ return g(x);}int main(void){ return f(3) +1;}在自己的CentOS虚拟机经过反汇编,去除其他信息后的汇编代码如下
使用命令行
gcc main.c -S -o main.s -m32
删除其他内容之得到后的汇编指令如下
g:
pushl %ebp 当前函数调用基址压栈
movl %esp,%ebp esp指向esp
这两步目的是初始化本函数的调用堆栈
movl 8(%ebp),%eax ebp上8位指向的地址赋给eax寄存器
获取参数
addl $2,%eax eax寄存器+2
执行指令
popl %ebp ebp出栈
ret
功能是通过清理本函数的调用堆栈返回函数调用之前代码继续执行
f:
pushl %ebp 当前函数调用基址压栈
movl %esp,%ebp esp指向ebp
初始化
subl $4,%esp esp减4
movl 8(%ebp),%eax ebp+8指向的值赋给eax
movl %eax,(%esp) eax赋给esp指向的值
call g 调用g
leave
清理g的调用堆栈
ret 返回函数调用之前代码继续执行
main:
pushl %ebp 当前函数调用基址压栈
movl %esp,%ebp esp指向ebp
subl $4,%esp esp减4
movl $3,(%esp) esp指向的内存地址存储的数值+3
执行函数
call f 执行f函数
addl $1,%eax eax寄存器指向的地址+1
leave
清理调用堆栈
ret 函数返回
总结
存储程序计算机一步步从寄存器读取并执行指令,通过操作寄存器和内存实现指令结果的输出。
函数调用堆栈展示了计算机调用函数的过程。
王靖志原创作品转载请注明出处
Powered by
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
- Linux内核分析1
- Linux内核启动分析(1)
- Linux内核分析(1)
- Linux 内核分析 作业1
- Linux内核分析 实验1
- Linux内核分析 实验1
- Linux内核分析【1】--分析汇编代码
- linux内核分析1--反汇编分析
- 深入分析Linux内核链表(1)
- Linux USB内核源码分析(1)
- 深入分析Linux内核源码 1
- 1 linux内核启动过程分析
- Linux内核分析-1/反汇编(堆栈)
- linux 内核代码分析1 TI am335x
- Linux内核源代码分析-第三章 内核体系结构概述-1
- Linux内核技术分析
- 开始linux内核分析
- Linux内核技术分析
- 519A - A and B and Chess【implementation】
- 谁动了我的文件 : 用systemtap监控
- 当退出时候,并没有全屏退出,只是在iframe里面退出的解决
- Download模块 (十三)
- cocos2d-3.2 逐帧动画播放
- Linux内核分析1
- 部分android控件属性总结
- kruskal
- 网页布局之响应式设计简明指南
- iOS开发下载文件速度计算
- 主流手机分辨率尺寸
- C++Primer第二章(变量和基本类型)笔记
- ***(leetcode_backtracking) Word Search
- JDK8更新内容