Linux内核分析-week 1
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相关推荐
- Linux内核分析——可执行程序的装载
链接的过程 首先运行C预处理器cpp,将C的源程序(a.c)翻译成ASCII码的中间文件(a.i) 接着C编译器ccl,将a.i翻译成ASCII汇编语言文件a.s 接着运行汇编器as,将a.s翻译成可 ...
- LINUX内核分析第二周学习总结——操作系统是如何工作的
LINUX内核分析第二周学习总结--操作系统是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...
- 《Linux内核分析》实验一
陈智威,<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 课堂学习笔记: 作业截图: 汇编代码堆栈分析: ...
- Linux 内核分析 之一:How Computer Works 实验
说明 欧长坤 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 这学期学校恰好有操 ...
- linux内核分析 网络九,“Linux内核分析”实验报告(九)
一 Linux内核分析博客简介及其索引 本次实验简单的分析了计算机如何进行工作,并通过简单的汇编实例进行解释分析 在本次实验中 通过听老师的视频分析,和自己的学习,初步了解了进程切换的原理.操作系统通 ...
- Linux内核分析作业第二周
操作系统是如何工作的 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.函数调用堆栈 1.计算机工作三 ...
- 期末总结:LINUX内核分析与设计期末总结
朱国庆原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一,心得体会 关于网上听课这 ...
- Linux内核分析:完成一个简单的时间片轮转多道程序内核代码
PS.贺邦 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 1.m ...
- 《Linux内核分析》实践4
<Linux内核分析> 实践四--ELF文件格式分析 20135211李行之 一.概述 1.ELF全称Executable and Linkable Format,可执行连接格式,ELF格 ...
- LINUX内核分析第四周——扒开系统调用的三层皮
LINUX内核分析第四周--扒开系统调用的三层皮 李雪琦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...
最新文章
- 第十七课:js数据缓存系统的原理
- Linux下安装nfs服务器
- 最常用的javascript自定义函数大搜集
- Windows Phone UI控件
- ECCV 2020《TRRNet: Tiered Relation Reasoning for Compositional Visual Question Answering》论文笔记
- 洛谷P2746 [USACO5.3]校园网Network of Schools
- SAP C4C,CRM和S4HANA的Saved Query使用介绍
- 全球10亿美元以上富翁人数排名,杭州超越东京,大家怎么看
- [SpringSecurity]web权限方案_用户认证_查询数据库完成认证
- JavaFX:TouchGesture内存泄漏?
- Multimedia (MP3, MPEG-4, AVI, DiVX, etc.) support in Ubuntu 12.04 (Precise)
- html堆叠柱状图脚本,Highcharts 堆叠组柱形图
- Java中继承方法的使用,以及使用方法的注意事项,继承方法重写的理解,白话文详解,简单易理解
- JDY-24M主机使用手册
- Flash Builder实用快捷键集锦
- 行远自迩,不负韶华!2020年度博客之星TOP 20榜单揭晓
- Mysql循环插入语句
- 基于Sketch Up软件校园建模案例分享
- U3D 游戏引擎之游戏架构脚本该如何来写
- 大数据热的冷思考:无法取代传统的新闻传播科研方法