Linux内核分析课程--通过反汇编一个简单的c程序,分析汇编代码并理解计算机如何工作的

时间:2022-09-10 00:56:18

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

一、计算机:辅助人脑的好工具

      计算机其实是:接收用户输入指令与数据,经过*处理器的数据与逻辑单元运算处理后,以产生或储存成有用的信息。       冯.诺依曼体系结构是现代计算机的基础,现在大多计算机仍是冯.诺依曼计算机的组织结构,只是作了一些改进而已,并没有从根本上突破冯体系结构的束缚。冯.诺依曼也因此被人们称为“计算机之父”。将指令和数据同时存放在存储器中,是冯·诺依曼计算机方案的特点之一计算机由控制器、运算器、存储器、输入设备、输出设备五部分组成冯·诺依曼提出的计算机体系结构,奠定了现代计算机的结构理念。

Linux内核分析课程--通过反汇编一个简单的c程序,分析汇编代码并理解计算机如何工作的

二、反汇编一个C语言程序,深入理解计算机如何工作

实验步骤如下: 首先打开终端,创建一个.c文件,在文件中敲入想要反汇编的c语言程序,c程序如下:Linux内核分析课程--通过反汇编一个简单的c程序,分析汇编代码并理解计算机如何工作的 使用gcc进行编译编译成功后,使用代码gcc -S -o lab1.s lab1.c -m32反汇编成汇编代码,如下图:Linux内核分析课程--通过反汇编一个简单的c程序,分析汇编代码并理解计算机如何工作的 Linux内核分析课程--通过反汇编一个简单的c程序,分析汇编代码并理解计算机如何工作的Linux内核分析课程--通过反汇编一个简单的c程序,分析汇编代码并理解计算机如何工作的
把.开头不必要的汇编程序删掉,如下:Linux内核分析课程--通过反汇编一个简单的c程序,分析汇编代码并理解计算机如何工作的 分析汇编代码: line17:所有的程序都是由main函数开始的,所以找到main函数开始执行 line18:ebp的数值压入栈中,以便程序调用时能返回到main函数的最开始 line19:esp的值赋给ebp,现在ebp和esp指向一个位置 line20:esp的数值减4,也就是说esp和ebp中间间隔一个单元格 line21:8存在esp所指的空间 line22:调用函数f,即:pushl eip;jmp f line8:进入函数f line9:同理把ebp压入栈中 line10:esp的值赋给ebp line11:esp的数值减4 line12:ebp加上8,储存在eax中 line13:把eax的值放到esp所指向的空间 line14:调用函数g,即:pushl eip;jmp g line1:进入函数f line2:ebp的数值压入栈中 line3:esp的值赋给ebp,现在ebp和esp指向一个位置 line4:ebp加上8,储存在eax中 line5:把4加到eax中 line6:ebp从堆栈中弹出 line7:执行ret指令,也就是popl %eip,此时跳到第15行

三、课程总结

经过本次课程,可以归纳出一下几点: 1、计算机的运行流程是按照冯诺一曼框架的,CPU将内存中的代码和数据读取到自身的寄存器中,进行运算。 2、在运行每个程序之前,CPU都会将上一个的eip和ebp压栈,为了退出函数时更好的找到原来的位置。 3、经过反汇编一个简单的C语言程序后,看到了一个汇编程序要比C语言程序复杂的多,坚定我好好学习本门课的决心。