0.本周进行了网易 mooc 公开课 《linux内核分析》课程,撰写此博客,一为完成作业,二为记录学习收获。

命令解释:push %eax    <==> sub $4 ,%espmovl %eax,(%esp)pop % eax    <==> movl (%esp),%eaxaddl $4,%espcall 0x12345 <==> push %eipmovl $012345,%eipret          <==> popl %eipenter        <==> pushl %ebpmovl %esp,%ebpleave        <==> movl %ebp,%esppopl %ebp

1.c程序代码:

    int g(int x,int y){return x + y;}int f(int x){return g(x , 2*x);}int main(void){return f(2) + 3;}

2.使用gcc –S –o main.s main.c -m32 将C程序汇编成32位汇编代码:

   1. g:2.   pushl   %ebp3.   movl    %esp, %ebp4.   movl    12(%ebp), %eax5.   movl    8(%ebp), %edx6.   addl    %edx, %eax7.   popl    %ebp8.   ret9. f:10.  pushl   %ebp11.  movl    %esp, %ebp12.  subl    $8, %esp13.  movl    8(%ebp), %eax14.  addl    %eax, %eax15.  movl    %eax, 4(%esp)16.  movl    8(%ebp), %eax17.  movl    %eax, (%esp)18.  call    g19.  leave20.  ret21. main:22.  pushl   %ebp23.  movl    %esp, %ebp24.  subl    $4, %esp25.  movl    $2, (%esp)26.  call    f27.  addl    $3, %eax28.  leave29.  ret

3.程序分析

(1)pushl    %ebp

(2)movl %esp, %ebp

(3)subl $4, %esp

(4)movl $2, (%esp)

这里是将立即数2存到esp指向的内存地址中

(5)call f

(6)pushl    %ebp

(7)movl %esp, %ebp

(8)subl $8, %esp

(9)movl 8(%ebp), %eax

(10)addl    %eax, %eax

(11)movl    %eax, 4(%esp)

(12)movl    8(%ebp), %eax

(13)movl    %eax, (%esp)

(14)call    g

(15) pushl  %ebp

(16)movl    %esp, %ebp

(17) movl   12(%ebp), %eax

(18)movl    8(%ebp), %edx

(19)addl    %edx, %eax

(20)popl    %ebp

(21)ret

(22) leave

(23) ret

(24)addl    $3, %eax

(25)leave

(26)ret

最终返回 eax = 9

4.学习总结
计算机通过执行存储的程序指令来进行工作,在程序执行过程中,堆栈存储了临时的数据,以便进行函数的调用和返回,由ebp和esp确定的临时栈对当前程序的执行环境进行了明确。在本次作业的完成过程中,加深了对堆栈变化的理解,对于计算机内部寄存器、存储器之间完美有序的配合,实现程序执行的机制有了更深刻的理解,是一次很有意义的实践。


bintasong 原创作品转载请注明出处《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

Linux内核分析-week 1相关推荐

  1. Linux内核分析——可执行程序的装载

    链接的过程 首先运行C预处理器cpp,将C的源程序(a.c)翻译成ASCII码的中间文件(a.i) 接着C编译器ccl,将a.i翻译成ASCII汇编语言文件a.s 接着运行汇编器as,将a.s翻译成可 ...

  2. LINUX内核分析第二周学习总结——操作系统是如何工作的

    LINUX内核分析第二周学习总结--操作系统是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...

  3. 《Linux内核分析》实验一

    陈智威,<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 课堂学习笔记: 作业截图: 汇编代码堆栈分析: ...

  4. Linux 内核分析 之一:How Computer Works 实验

    说明 欧长坤 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 这学期学校恰好有操 ...

  5. linux内核分析 网络九,“Linux内核分析”实验报告(九)

    一 Linux内核分析博客简介及其索引 本次实验简单的分析了计算机如何进行工作,并通过简单的汇编实例进行解释分析 在本次实验中 通过听老师的视频分析,和自己的学习,初步了解了进程切换的原理.操作系统通 ...

  6. Linux内核分析作业第二周

    操作系统是如何工作的 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.函数调用堆栈 1.计算机工作三 ...

  7. 期末总结:LINUX内核分析与设计期末总结

    朱国庆原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一,心得体会 关于网上听课这 ...

  8. Linux内核分析:完成一个简单的时间片轮转多道程序内核代码

    PS.贺邦   原创作品转载请注明出处  <Linux内核分析>MOOC课程    http://mooc.study.163.com/course/USTC-1000029000 1.m ...

  9. 《Linux内核分析》实践4

    <Linux内核分析> 实践四--ELF文件格式分析 20135211李行之 一.概述 1.ELF全称Executable and Linkable Format,可执行连接格式,ELF格 ...

  10. LINUX内核分析第四周——扒开系统调用的三层皮

    LINUX内核分析第四周--扒开系统调用的三层皮 李雪琦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...

最新文章

  1. 第十七课:js数据缓存系统的原理
  2. Linux下安装nfs服务器
  3. 最常用的javascript自定义函数大搜集
  4. Windows Phone UI控件
  5. ECCV 2020《TRRNet: Tiered Relation Reasoning for Compositional Visual Question Answering》论文笔记
  6. 洛谷P2746 [USACO5.3]校园网Network of Schools
  7. SAP C4C,CRM和S4HANA的Saved Query使用介绍
  8. 全球10亿美元以上富翁人数排名,杭州超越东京,大家怎么看
  9. [SpringSecurity]web权限方案_用户认证_查询数据库完成认证
  10. JavaFX:TouchGesture内存泄漏?
  11. Multimedia (MP3, MPEG-4, AVI, DiVX, etc.) support in Ubuntu 12.04 (Precise)
  12. html堆叠柱状图脚本,Highcharts 堆叠组柱形图
  13. Java中继承方法的使用,以及使用方法的注意事项,继承方法重写的理解,白话文详解,简单易理解
  14. JDY-24M主机使用手册
  15. Flash Builder实用快捷键集锦
  16. 行远自迩,不负韶华!2020年度博客之星TOP 20榜单揭晓
  17. Mysql循环插入语句
  18. 基于Sketch Up软件校园建模案例分享
  19. U3D 游戏引擎之游戏架构脚本该如何来写
  20. 大数据热的冷思考:无法取代传统的新闻传播科研方法

热门文章

  1. 腾讯无人车开进硅谷!建团队、招人才,国内放出商务岗位
  2. 腾讯开源业内最大多标签图像数据集,附ResNet-101模型
  3. AI Challenger全球AI挑战赛开幕,300万奖金池,还可能获李开复投资
  4. Facebook秘密文件泄露:赚钱(和背锅)是AI的使命
  5. Linux 命名空间
  6. Rancher如何按计算资源调度
  7. RQNOJ PID2 / 开心的金明
  8. Memcache监控工具 -- memkeys
  9. GITHUB使用简介
  10. Katta:基于Lucene可伸缩分布式实时搜索方案