浅谈计算机是如何工作的及Linux下的简单反汇编操作
记得在学ARM编程时候学过如何基本的ARM汇编操作,也涉及到一些非常基础的Linux下的汇编指令形式。但都未真正深入了解,也没写过多少汇编代码,除了能够认识代码的含义以外,真正上手写一些汇编代码进行问题的处理我还在学习中。
谈及计算机是如何工作的,似乎在每一本计算机有关的书上都会出现一个名字,那就是冯诺依曼。我记得这也是机房墙上必帖的人物头像,和图灵站在一块。
这篇文章并不过多的论述计算机组成原理,只是简单的阐述一下到目前为止我所能记得的领悟的计算机工作的过程。
书上有谈到冯诺依曼结构是通用的计算机结构,它也被称作普林斯顿结构。它只有一个主存储器,主存储器中可以存放的是数据也可以是指令。并且它只有一种访问主存储器的指令。CPU通过总线与存储器进行信息交换。这种结构事实上是不高效的,因为数据和指令都杂合在一起。所以,对应的比较好的设计就是哈佛结构,哈佛结构是指令与数据分开存储的体系结构。它有存放指令和数据的分离的地址空间和访问指令,所以这里就有两类总线,数据总线和指令总线。因为进行了职责分离,因此哈佛结构的计算机处理器具有更高的数据吞吐率。
计算机工作的原理其实就在于对数据的处理,而对数据的处理通过调用指令的方式进行。我们平时操作计算机,可以通过键盘,通过鼠标操作,对应的是计算机电路0,1的电位变化。而如何解释操作则是由操作系统来进行处理,总而言之,计算机工作过程都被进行了抽象与封装,而操作系统是对底层的第一层封装。最基础的计算机由存储器,输入输出设备,屏幕,主板,CPU等硬件组成。如何驱动这些硬件则是由软件来进行。
编程是在操作系统的基础上进行的通过代码的方式进行操作再由编译器进行编译来执行。
在Linux下我们进行了反汇编来测试了一下C代码如何转换成汇编代码的过程。
我们在实验楼这个平台进行,C代码是简单的三个函数(一个主函数和两个被调用函数):
在Linux下用GCC进行反汇编:
gcc -S -o main.s main.c -m32
则可以得到main.c的汇编级代码:
以点开头的是注释类所以删去了大部分的这样的语句,以上截图是为全部的汇编代码。
首先从main:开始看起:
pushl %ebp
ebp是基础栈指针,假想为0,此时栈为空,esp和ebp都指向栈底,这条指令等价于:
subl $4, %esp
movl %ebp,(%esp)
即:将esp指向的位置向下减去4,再把esp对应处的值设为ebp的位置,假设为0;
movl %esp, %ebp
是将ebp指针值改为esp指针的值,即esp再次和ebp指向同一个位置;
subl $4, %esp
movl $8, (%esp)
这两条指令等价于pushl $8, esp指针向下移动4个字节;再把esp指向的寄存器处值设为8;
call f
调用函数f,这条指令等价于
pushl %eip(*)
movl f %eip(*)
意思是先暂存eip的值,eip是指向要调用指令的位置,在图中是第24行,存在寄存器中,然后对eip进行赋值为f的入口地址,执行f函数的代码;
pushl %ebp
esp向下走4个字节,并把ebp指针值压栈
movl %esp, %ebp
将ebp的值设置为何esp相同
subl $4,%esp
esp向下走4个字节
movl 8(%ebp), %eax
eax寄存器的值等于ebp+8,即eax现在指向数字8
movl %eax, (%esp)
将esp位置的值设为eax指针值
call g
等价于
pushl %eip(*)
movl g %eip(*)
调用函数g, 将eip的值存在寄存器,图中是16行,再对eip进行赋值,进入g函数入口;
pushl %ebp
esp向下进4个字节并把ebp指针值放进来
movl %esp, %ebp
使得ebp=esp
movl 8(%ebp), %eax
令eax=ebp+8,向上走8个字节指向存储着eax值,这个eax指向的是数字8
addl $10,%eax
把eax指向的值与10相加得到18
popl %ebp
等价于movl (%esp), %ebp
addl $4, %esp
然后:
ret
等价于 popl %eip(*)
跳转到16行进行执行
leave
等价于
movl %ebp, %esp
popl %ebp
再弹出eip跳转到第24行暂存的eax值为18,再与3相加,再leave,再ret,ebp与esp均回到初值。
王兵原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
浅谈计算机是如何工作的及Linux下的简单反汇编操作相关推荐
- 浅谈计算机在农业工作中的应用,浅析计算机在农业中的应用论文
计算机技术在农业科研中的广泛应用,为农业科研工作带来了研究成效,推动农业科研工作的顺利发展.下面是学习啦小编给大家推荐的浅析计算机在农业中的应用论文,希望大家喜欢! 浅析计算机在农业中的应用论文篇一 ...
- 2017浅谈计算机类找工作
前言 转眼间来到海大已经呆了七年,本科专业为计算机科学与技术,先后在海信研发和百度实习,目前分别拿到百度和阿里测开offer. 实习 先后在海信和百度MSG实习过一段时间,下面简单介绍下实习经历: 海 ...
- 计算机在财务核算中的应用,浅谈计算机在财务核算和财务管理工作中的辅助应用...
浅谈计算机在财务核算和财务管理工作中的辅助应用 计算机在财务管理中的应用日益广泛,已成为企业财务管理的必要手段.计算机的应用改善了企业财务管理环境,提高了财 (本文共1页) 阅读全文>> ...
- 工作中应用计算机,浅谈计算机在我国计工作中的应用与发展.doc
浅谈计算机在我国计工作中的应用与发展 <计算机的过去现在与未来>课程论文 浅谈计算机在我国会计工作中的 应用与发展 姓名学号学院会计学院日期2010-10-30 评分页 项目权重实际分数选 ...
- 从事医院计算机网络管理工作,浅谈医院计算机网络安全管理工作.doc
浅谈医院计算机网络安全管理工作 浅谈医院计算机网络安全管理工作 [ 摘 要 ] 随着我国社会经济的不断发展与进步,各项科学技术水平也跟着在不断提高,紧跟时代潮流,医院的工作方式也一改以往主要依靠人力而 ...
- 计算机机房的日常维护工作,浅谈计算机机房的日常维护及管理.doc
浅谈计算机机房的日常维护及管理.doc 浅谈计算机机房的日常维护及管理 摘 要:学校计算机机房管理是一项系统工作,是保证学校计算机教学活动的基础工作.科学有效地管理好机房不仅可以使现有的设备发挥最大功 ...
- 读计算机平面设计要什么文化好,浅谈计算机平面设计的有关论文
随着我国经济的不断发展,计算机已经实现了全面普及.相对而言,这就对计算机平面设计的要求出现相应的提升.下面是学习啦小编给大家推荐的浅谈计算机平面设计的有关论文,希望大家喜欢! 浅谈计算机平面设计的有关 ...
- 谈计算机知识对学生的作用,浅谈计算机在教学中的作用
浅谈计算机在教学中的作用 时间:2017-07-19 08:54:57 浅谈计算机在教学中的作用 计算机基础教育的教学目标是使学生掌握计算机的基本知识和操作技能,把计算机作为获取和交流信息的工具,为学 ...
- 计算机科学技术的教育应用论文,浅谈计算机科学技术在计算机教学中的应用论文...
计算机科学,研究计算机及其周围各种现象和规律的科学,亦即研究计算机系统结构.程序系统(即软件).人工智能以及计算本身的性质和问题的学科.计算机科学是一门包含各种各样与计算和信息处理相关主题的系统学科, ...
最新文章
- 2021年大数据Hadoop(二十二):MapReduce的自定义分组
- 算法分析结课总结--回溯算法
- ccentos 7下安装php5.6并使用nginx + php-fpm部署多个不同端口网站
- java 正则表达式语法_Java 正则表达式基础语法
- kafka topic 目录存放在哪_Kafka系列文章之安装测试-第2篇
- Docker 6岁啦!多场线下 Party 即将来袭!
- Android报错:java.lang.ClassCastException: com.github.mikephil.charting.charts.PieChart cannot be cast
- C语言简明教程--指针5
- 侮辱性极强!6年编发无数反诈骗新闻,90后小编竟被骗了5万...
- Sublime PyV8
- 【四二学堂】代码写诗之--《二十一杯酒》
- android 调色板,所不了解的Android调色板
- CVPR2021 最具创造力的那些工作成果!或许这就是计算机视觉的魅力!
- 腾讯的“小弟”长大了
- java.lang.NumberFormatException: null原因
- java自行车DH32,中国国际自行车嘉年华之Enduro、DH装备篇
- 五万字 | Hive知识体系保姆级教程
- 基于主成分分析的人脸识别及表情识别
- 线性回归(Linear Regression)和最小二乘法(ordinary least squares)
- oracle 基本语法大全