张潇月《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

一、实验步骤

首先借助实验楼这个平台进入Linux系统,打开了Xfce终端将代码写入。

通过cd Code命令打开Code文件夹,将后面录入的代码放在文件夹中,便于下载代码,有利于后面的详细分析。

其中通过命令gcc  main.c命令来编译代码;通过gcc  -S  -o  main.s  main.c  –m32来反汇编代码。-m32代表的是32位系统。

将得到的main.s文件打开,删掉.*的语句,得到最终的、起真正关键作用的语句。

二、堆栈变化

按照计算机运行前后,代码排序为

18    pushl    %ebp

19    movl     %esp, %ebp

20    subl     $4, %esp

21    movl     $9, (%esp)

22    call    f

9    pushl    %ebp

10    movl     %esp, %ebp

11    subl      $4, %esp

12    movl     8(%ebp), %eax

13    movl     %eax, (%esp)

14    call   g

2    pushl    %ebp

3    movl     %esp, %ebp

4    movl     8(%ebp), %eax

5    addl     $5, %eax       (eax=9+5=14)

6    popl     %ebp

7    ret

15    leave

16    ret

23    addl      $2, %eax    (eax=14+2=16)

24    leave

25    ret

三、计算机是如何工作的

我认为计算机其实是很机械的在工作中,它只是从内存里取出的第一条指令开始,开始做对应的动作。从存储器中取出对应的数据,然后运算或者其他逻辑操作等,然后将结果送去对应的地址去。然后在进行下一条指令,重复一样的动作,直到结束。

Linux内核分析——汇编代码执行及堆栈变化的更多相关文章

  1. 20135239益西拉姆 Linux内核分析 汇编一个简单的c程序并分析其指令过程

    益西拉姆+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第一周linux内核分析 学习笔记 一.计算机 ...

  2. linux内核分析作业:以一简单C程序为例,分析汇编代码理解计算机如何工作

    一.实验 使用gcc –S –o main.s main.c -m32 命令编译成汇编代码,如下代码中的数字请自行修改以防与他人雷同 int g(int x) { return x + 3; } in ...

  3. linux内核分析作业4:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    系统调用:库函数封装了系统调用,通过库函数和系统调用打交道 用户态:低级别执行状态,代码的掌控范围会受到限制. 内核态:高执行级别,代码可移植性特权指令,访问任意物理地址 为什么划分级别:如果全部特权 ...

  4. 分析一个C语言程序生成的汇编代码-《Linux内核分析》Week1作业

    署名信息 郭春阳 原创作品转载请注明出处 :<Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 C源码 这 ...

  5. LInux内核分析--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    实验者:江军 ID:fuchen1994 实验描述: 选择一个系统调用(13号系统调用time除外),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3 ...

  6. 《linux内核分析》作业一:分析汇编代码

    通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的(王海宁) 姓名:王海宁                             学号:20135103 课程:<Linux内核分析& ...

  7. 《Linux内核分析》第八周笔记 进程的切换和系统的一般执行过程

    20135132陈雨鑫 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ...

  8. LINUX内核分析第八周学习总结——进程的切换和系统的一般执行过程

    LINUX内核分析第八周学习总结——进程的切换和系统的一般执行过程 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/c ...

  9. 《Linux内核分析》 第八节 进程的切换和一般的执行过程

    张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核分析 第八 ...

随机推荐

  1. php 一些经常用到的方法

    获取当前url地址 /** * 获取当前url * @author Red * @date * @return string */ function getRequestURL() { if (!is ...

  2. 深入理解CSS中的层叠上下文和层叠顺序(转)

    by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.com/wordpress/?p=5115 零.世间的道 ...

  3. Docker 官网信息

    Docker Engine Docker-for-linuxhttps://docs.docker.com/engine/installation/linux/rhel/https://docs.do ...

  4. C# ListView用法详解

    一.ListView类 1.常用的基本属性: (1)FullRowSelect:设置是否行选择模式.(默认为false) 提示:只有在Details视图该属性才有意义. (2) GridLines:设 ...

  5. 使用PopupContainerEdit和PopupContainerControl制作下拉菜单树小记

    转自:http://jlcon.iteye.com/blog/898210 首先拖动一个PopupContainerEdit控件和PopupContainerControl控件到界面上,在PopupC ...

  6. HttpClientUtil [使用apache httpclient模拟http请求]

    基于httpclient-4.5.2 模拟http请求 以get/post方式发送json请求,并获取服务器返回的json -------------------------------------- ...

  7. Camel运行原理分析

    Camel运行原理分析 以一个简单的例子说明一下camel的运行原理,例子本身很简单,目的就是将一个目录下的文件搬运到另一个文件夹,处理器只是将文件(限于文本文件)的内容打印到控制台,首先代码如下: ...

  8. MyBatis原理分析之四:一次SQL查询的源码分析

    上回我们讲到Mybatis加载相关的配置文件进行初始化,这回我们讲一下一次SQL查询怎么进行的. 准备工作 Mybatis完成一次SQL查询需要使用的代码如下: ) { ); ) { throw ne ...

  9. 使用ffmpeg转换webm格式

    安装ffmpeg brew install ffmpeg --with-libvpx --with-libvorbis 如果已经装过 brew reinstall ffmpeg --with-libv ...

  10. WPF中TreeView的使用

    因为项目中需要用到TreeView控件,由于是第一次在WPF中用到,因此事先在网上搜了很多关于数据绑定的方法介绍,个人经过实际应用,觉得WPF中的HierarchicalDataTemplate定义模 ...