程涵 
原创博客
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 
【反汇编一个简单的C程序】
 

  • 实验截图:


  • 分析汇编代码的工作过程中堆栈的变化

两个宏指令:enter, leave

  1. 除特殊指明,eip在执行完某一条指令后会自动开始执行下一条指令。
  2. esp,ebp寄存器总是指向一个堆栈。esp指向栈顶,ebp指向栈底(栈底是相对的,每个函数有自己的基地址)。函数调用堆栈是由逻辑上多个堆栈叠加起来的。
  3. 函数的返回值默认使用eax寄存器存储返回给上一级函数。

  • 刚开始,指向一个空的堆栈。

  • pushl %ebp

就是把ebp的值放入,ebp的值为0.

  • movl %esp, %ebp

压栈时,把esp的位置向下移动。

ebp指向标号1的位置。

  • subl $4, %esp

将esp向下移动一个位置。

  • movl $8, (%esp)

把8放到标号2的位置。

  • call f

相当于:

pushl %eip

movl f, %eip

  • pushl %ebp

移动ebp,同时esp自动向下移动一位。

  • movl %esp, %ebp

  • subl $4, %esp

  • movl 8(%ebp), %eax

变址寻址。将ebp的位置向上移动两位,内容是8。 eax=8。

  • movl %eax, (%esp)

把8放到esp的位置。

  • call g

(更改15)

  • 执行完g函数

  • 执行完f函数的leave命令

  • 执行完全部命令

以上是实验部分。


  • 阐明自己对“计算机是如何工作的”理解。

引用:Basics of Binary Numbers

For computers, binary numbers are great stuff because:

  • They are simple to work with -- no big addition tables and multiplication tables to learn, just do the same things over and over, very fast.
  • They just use two values of voltage, magnetism, or other signal, which makes the hardware easier to design and more noise resistant.

对于计算机,二进制数字是伟大的,因为他们是简单的一起工作,没有什么大的加法表和乘法表学习,只是做同样的事情一遍又一遍,速度非常快。而且他们仅仅使用电压,磁,或其它信号,这使得硬件更易于设计和更抗噪声的两个值。

 
在学习与计算机有关的课程之前,对于这个话题是一无所知的,但一直存有好奇和探险的心情。
现在因MOOC的这门课程而有机会更加接近计算机是如何工作的这一个问题。
如何回答这个问题,可以从客观的角度回答,由硬件系统(hardware system)和软件系统(software system)两部分组成的。
引用了有关二进制的文章,是因为一直以来都对二进制感到很好奇,仅仅靠0和1就可以让计算机如此快速而高效的运作。
计算机的存储记忆能力和逻辑判断能力让人们不需要进行任何的干预,在程序控制下,计算机可以连续、自动地工作。
现在的我对于计算机如何工作还是一知半解的,希望在今后的课程中不断探索,形成自己对于计算机工作机制的更加多方面和深刻的理解。
 
 
 
 
程涵

【MOOC EXP】Linux内核分析实验一报告的更多相关文章

  1. 【MOOC EXP】Linux内核分析实验八报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 进程的切换和系统的一般执行过程 知识点 ...

  2. 【MOOC EXP】Linux内核分析实验七报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 可执行程序的装载 知识点梳理 一.预处 ...

  3. 【MOOC EXP】Linux内核分析实验六报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 进程的描述和进程的创建 知识点梳理: ...

  4. 【MOOC EXP】Linux内核分析实验二报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000  [操作系统是如何工作的]   教学内 ...

  5. 【MOOC EXP】Linux内核分析实验三报告

     程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 [跟踪分析Linux内核的启动过程] ...

  6. 【MOOC EXP】Linux内核分析实验四报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 [使用库函数API和C代码中嵌入汇编代 ...

  7. 【MOOC EXP】Linux内核分析实验五报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 分析system_call中断处理过程 ...

  8. “Linux内核分析”实验一报告

    张文俊 + 原创作品转载请注明出处 + <Linux 内核分析> MOOC 课程 实验要求: 1.总结部分要求阐明自己对“计算机是如何工作的”理解: 2.博客中需要使用实验截图: 实验内容 ...

  9. “Linux内核分析”实验二报告

    张文俊 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.第二周学习内 ...

随机推荐

  1. SDN第三次上机

    1.创建以下拓扑(可采用任意方式) 2.利用OVS命令下发流表,实现VLAN功能 3.利用OVS命令查看流表 4.验证性测试 5.Wireshark抓包验证

  2. Windows2008 Server r2 64位显示桌面图标的方法

    点击桌面左下方的开始菜单,在搜索框中输入“icon”,如下图所示: 点击:显示或隐藏桌面上的通用图标,然后弹出如下图: 应用并确定即可!

  3. 【转】Android实战技巧之四十九:Usb通信之USB Host

    零 USB背景知识 USB是一种数据通信方式,也是一种数据总线,而且是最复杂的总线之一. 硬件上,它是用插头连接.一边是公头(plug),一边是母头(receptacle).例如,PC上的插座就是母头 ...

  4. 【转】Android中通知的提示音、震动和LED灯效果小例子

    通知(Notification)是 Android 系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现.发出一条通知后,手机最上方 ...

  5. Python各类并发模版

    以后在写一些Python并发的时候参考下面这个模块,小西总结的挺全的,直接搬砖了. 进程并发 from multiprocessing import Pool, Manager def func(d, ...

  6. 随手练——ZOJ-1074 To the Max(最大矩阵和)

    To the Max http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1074 动态规划(O(n^3)) 获得一维数组的最大子 ...

  7. oracle11g dataguard 备库数据同步的检查方法

    概述: 一.环境      主库:       ip地址:192.168.122.203       oracle根目录:/data/db/oracle       SID:qyq       数据文 ...

  8. opencv——对象提取与测量

    #include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespac ...

  9. DQN(Deep Reiforcement Learning) 发展历程(四)

    目录 不基于模型的控制 选取动作的方法 在策略上的学习(on-policy) 不在策略上的学习(off-policy) 参考 DQN发展历程(一) DQN发展历程(二) DQN发展历程(三) DQN发 ...

  10. 关于C#中async/await中的异常处理(下)-(转载)

    上一篇文章里我们讨论了某些async/await的用法中出现遗漏异常的情况,并且谈到该如何使用WhenAll辅助方法来避免这种情况.WhenAll辅助方法将会汇总一系列的任务对象,一旦其中某个出错,则 ...