秦鼎涛  《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

实验一

通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

一、C语言源代码:

  

  1. int g(int x)
  2. {
  3. return x + 3;
  4. }
  5. int f(int x)
  6. {
  7. return g(x);
  8. }
  9. int main(void)
  10. {
  11. return f(8) + 1;
  12. }

二、实验楼截图:

  

  

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

跟C语言一样,汇编代码也是从main函数开始执行的,计算机利用eip从main开始获取指令并执行,每次自加一,顺序执行,具体如下注释:

g:

  pushl  %ebp        //ebp压栈

  movl   %esp,%eax      

  addl    $3,%eax      //eax=8+3=11

  popl    %ebp       //ebp弹栈

  ret            //popl eip,跳转f函数eip(15)即leave处

f:

  pushl  %ebp        //ebp压栈

  movl   %esp,%ebp       //ebp跟esp指向同一位置

  subl    $4,%esp      //esp-4

  movl   8(%ebp),%eax    //变址寻址8,对应值赋值给eax

  movl   %eax,(%esp)    //把eax赋值给esp对应位置

  call     g          //push eip;movl g,eip

  leave             //movl %ebp,%esp;popl %edp

  ret              //popl eip,执行main函数里addl $1,%eax

main:

  pushl  %ebp                               //把ebp压栈,ESP的值加一个字节

  movl   %esp,%ebp        //ebp指向esp同一位置

  subl    $4,%esp          //esp减4

  movl   $8,(%esp)         //esp所指向位置存储立即数8

  call      f              //push eip;movl f eip  即跳转函数f的指令

  addl   $1,%eax          //eax=11+1=12

  leave                //movl %ebp,%esp;popl %edp,又一次变成空栈

  ret                  //popl eip

  

P.S.  1.函数返回值默认使用eax寄存器存储返回给上一级函数。

四、总结

  这次实验利用一个简单的c语言小程序,转换成汇编语言,通过对汇编代码的分析了解了计算机如何工作。汇编语言是介于高级编程语言

和机器语言之间的一种语言,更易于分析计算机工作过程。

  计算机利用一系列的寄存器,获取内存中的指令,通过依次执行,来完成指令流所对应的函数或者说功能。

    

通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的的更多相关文章

  1. 第一周:通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

    姓名:吕松鸿 学号:20135229 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...

  2. 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

    实验一:通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 学号:20135114 姓名:王朝宪 注: 原创作品转载请注明出处   <Linux内核分析>MOOC课程http: ...

  3. 第一讲 一个简单的Qt程序分析

    本文概要:通过一个简单的Qt程序来介绍Qt程序编写的基本框架与一些Qt程序中常见的概念 #include <QApplication> #include <QPushButton&g ...

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

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

  5. UNP学习笔记2——从一个简单的ECHO程序分析TCP客户/服务器之间的通信

    1 概述 编写一个简单的ECHO(回复)程序来分析TCP客户和服务器之间的通信流程,要求如下: 客户从标准输入读入一行文本,并发送给服务器 服务器从网络输入读取这个文本,并回复给客户 客户从网络输入读 ...

  6. Linux内核分析第一周-通过分析汇编代码理解计算机是如何工作的

    首先,我们先写一个简单的C语言程序,如下: int g(int x) { return x +3; } int f(int x) { return g(x); } int main(void) { r ...

  7. 《Linux内核分析》第一周 计算机是如何工作的?

    刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK ONE(2. ...

  8. 《Linux内核分析》 第一节 计算机是如何工作的

    第一节 计算机是如何工作的 张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002900 ...

  9. Flink源码分析 - 剖析一个简单的Flink程序

    本篇文章首发于头条号Flink程序是如何执行的?通过源码来剖析一个简单的Flink程序,欢迎关注头条号和微信公众号"大数据技术和人工智能"(微信搜索bigdata_ai_tech) ...

随机推荐

  1. C# 利用VS自带的WSDL工具生成WebService服务类(转载)

    WebService有两种使用方式,一种是直接通过添加服务引用,另一种则是通过WSDL生成. 添加服务引用大家基本都用过,这里就不讲解了. 那么,既然有直接引用的方式,为什么还要通过WSDL生成呢? ...

  2. 团队作业——Alpha冲刺 7/12

    团队作业--Alpha冲刺 冲刺任务安排 杨光海天 今日任务:将编辑界面与标题栏合并.与同队成员,讨论部分功能合并的问题. 明日任务:编辑界面与另一队员完成的字体设置弹窗合并. 郭剑南 今日任务:使用 ...

  3. 基于Java反射的map自动装配JavaBean工具类设计

    我们平时在用Myabtis时不是常常需要用map来传递参数,大体是如下的步骤: public List<Role> findRoles(Map<String,Object> p ...

  4. 7、JVM--虚拟机类加载机制

    7.1.概述 再类文件结构中 在Class文件中描述的各种信息,最终都需要加载到虚拟机中之后才能运行和使用. 而虚拟机如何加载这些Class文件?Class文件中的信息进入到虚拟机后会发生什么变化? ...

  5. MP实战系列(十四)之分页使用

    MyBatis Plus的分页,有插件式的,也有其自带了,插件需要配置,说麻烦也不是特别麻烦,不过觉得现有的MyBatis Plus足以解决,就懒得配置插件了. MyBatis Plus的资料不算是太 ...

  6. IN2REG group 的时序分析

    针对 IN2REG 的 timing group,其 timing 模型是假设 input pin 外面有一个虚拟的reg(如图中的 reg1),这个虚拟reg的 clock 是 virtual cl ...

  7. 客户端本地存储的比较及使用window.name数据传输

    一:cookie: 1. 什么是cookie? Cookie是在客户端用于存储会话信息的,用户请求页面在web服务器与浏览器之间传递.每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cooki ...

  8. JS添加标签效果

    JS添加标签效果 在豆瓣网上添加自己的标签是一种常见的效果,今天也就做了一个简单的demo.由于时间的问题 我不多原理,大家可以试着操作几遍就能明白其中的原理了. JSFiddle的效果如下: 点击我 ...

  9. 微信小程序 bindcontroltap 绑定 没生效

    微信 bindcontroltap 绑定 没生效 多次查看官方文档,代码没有问题, 解决: windows下  显示设置中 缩放必须是100%,

  10. Patchwork(2013年)--CNV检测方法流程

    文章题目:Patchwork: allele-specific copy number analysis of whole-genome sequenced tumor tissue 特点: 可以检测 ...