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

齐昱博 + 原创作品转载请注明出处 + 《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语言程序复杂的多,坚定我好好学习本门课的决心。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值