齐昱博 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
一、计算机:辅助人脑的好工具
计算机其实是:接收用户输入指令与数据,经过中央处理器的数据与逻辑单元运算处理后,以产生或储存成有用的信息。
冯.诺依曼体系结构是现代计算机的基础,现在大多计算机仍是冯.诺依曼计算机的组织结构,只是作了一些改进而已,并没有从根本上突破冯体系结构的束缚。冯.诺依曼也因此被人们称为“计算机之父”。将指令和数据同时存放在存储器中,是冯·诺依曼计算机方案的特点之一计算机由控制器、运算器、存储器、输入设备、输出设备五部分组成冯·诺依曼提出的计算机体系结构,奠定了现代计算机的结构理念。
二、反汇编一个C语言程序,深入理解计算机如何工作
实验步骤如下:
首先打开终端,创建一个.c文件,在文件中敲入想要反汇编的c语言程序,c程序如下:
使用gcc进行编译编译成功后,使用代码gcc -S -o lab1.s lab1.c -m32反汇编成汇编代码,如下图:
把.开头不必要的汇编程序删掉,如下:
分析汇编代码:
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语言程序复杂的多,坚定我好好学习本门课的决心。