Linux内核分析——简单分析汇编代码
来源:互联网 发布:梦幻口袋版炼兽笼数据 编辑:程序博客网 时间:2024/06/07 18:38
一、实验过程:
实验内容为通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的。
1.进入linux实验环境,打开一个终端。
2.打开Code文件下的shiyanlou_cs195文件夹,vi mian.c文件。
3.输入命令gcc -S -o main.c mian.s -m32得到main.s文件。
4.删除以点开头的行,得到最终的main.s。
二、分析汇编代码的工作工程。
1.首先理解ebp是指向栈底的,esp指向当前栈执行的一条指令,eip指向当前程序按顺序执行的指令,eax存储上一级函数的返回值。
2.刚开始从main函数开始执行前四条指令,只要作用让栈中0的位置为ebp 0,栈1的位置存放8.
3.执行call f时此时栈2的位置放的是eip 23.即当前的下一条指令也就会到f函数完成后回溯到接下来的第23行指令。
4.接下来eip指向f函数的第一行指令,f的前5行指令作用是栈3的位置存放ebp 1,eax的值为8,栈4的位置存放eax 8。
5.执行call g时此时栈5的位置放的是eip 15.即当前的下一条指令也就会到g函数完成后回溯到接下来的第15行指令.
6.接下来eip指向g函数的第一行指令,g函数前两行作用是让栈6存放ebp 4,第三行和第四行指令作用是让eax=8+4=12.
7.接下来g函数popl %ebp,将ebp指向之前4的位置,ret即pop eip的意思,将eip 15pop出来 让eip指向之前f函数的15的位置。
8.leave即让esp指向ebp的位置同时pop ebp,使ebp指向之前的1的位置,接下来的ret 即pop eip ,让eip指向之前的main函数的23行的位置。
9.main的23行add 将eax的值变为eax=12+2=14.最后的leave和ret让ebp和esp都指向最初的底栈的位置。
三、理解计算机怎样工作的。
1.汇编一个简单的计算机的基本原理是存储程序和程序控制。预先要把指挥计算机如何进行操作的指令序列(称为程序)和原始数据通过输入设备输送到计算机内存贮器 中。每一条指令中明确规定了计算机从哪个地址取数,进行什么操作,然后送到什么地址去等步骤。
2.计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令的要求,从存储器取出数据进行的运算和逻辑操作等加工,然后再按地址把结果送到内存中去。接下来,再取出第二条,在控制器的指挥下完成规定操作。依次进行下去。直至遇到停止指令。
- Linux内核分析——简单分析汇编代码
- linux内核分析——简单代码反汇编为汇编代码分析
- Linux内核分析之一——简单C程序的汇编代码工作过程分析
- [网易云课堂]Linux内核分析(一)——简单C程序汇编代码分析
- 《Linux内核分析》(一)——反汇编一个简单的C程序并分析其汇编代码的执行
- Linux内核分析【1】--分析汇编代码
- Linux内核分析---汇编简单C程序
- Linux内核源码分析—Linux内核中的嵌入式汇编
- Linux内核分析实验2——一个简单的内核代码分析
- Linux内核分析,c程序汇编代码分析--第一周
- Linux系统分析入门--简单汇编代码分析
- MOOC课程《Linux内核分析》——反汇编一个简单的C程序
- Linux内核分析——反汇编一个简单C程序
- Linux内核分析实验1——汇编一个简单的C程序
- Linux内核分析——x86汇编基础
- 从高级语言到汇编代码 《Linux内核分析》笔记
- Linux内核分析MOOC课程汇编分析
- linux内核分析1--反汇编分析
- libcef内核 chromium 渲染硬件加速软件渲染知识点
- 欢迎使用CSDN-markdown编辑器
- java基础
- OpenCV学习笔记二:操作像素
- 编写界面
- Linux内核分析——简单分析汇编代码
- 如何删除SQL Server 2005 Compact Edition数据库由于标题限制只能删除部分
- Hwadee实训--day10
- mysql中获取一天、一周、一月时间数据的各种sql语句写法
- [Untiy&随机数&C#]怎样加上一个随机的数,并且在一定的范围内
- 洛谷 P1791 线段覆盖
- 文章标题
- GYM 100488 H.Tony Hawk’s Pro Skater(二分)
- IDEA 安卓开发gradle sync failed问题