操作系统是怎么工作的——函数的堆栈框架/嵌入式代码
1.函数堆栈框架
1.1框架模型

call指令:
1)将eip中的下一条指令的地址A保存在栈顶;
2)设置eip指向被调用程序的代码处。
ret指令:将地址A恢复到eip中
这样就将函数的调用变为顺序执行的指令流。
1.2框架形成
初始堆栈
1)call xxx(函数),执行call时, cs : eip原来的值指向call下一条指令,该值被保存到栈顶,然后cs : eip的值,指向xxx的入口地址。

cs:eip被压栈
2)进入xxx
第一条指令: pushl %ebp

上级函数的基地址压栈
第二条指令: movl %esp, %ebp

在原来堆栈的地址空间,创建了新的函数调用堆栈
函数体中的常规操作,可能会压栈、出栈
3)退出xxx
movl %ebp,%esp
popl %ebp

执行此命令后ebp指向原来的地址
ret

cs:eip出栈
2.嵌入式汇编
2.1格式
asm(
汇编语句模板:
输出部分:
输入部分:
破坏格式描述部分);
即格式为asm(“statements”:Output_regs:input_regs:clobbered_regs);
注:

2.2例子

注:%1,%2指输入输出部分,第一个编号为0,第二个编号为1……,因此%1代表c(寄存器ecx),%(寄存器edx)
操作系统是怎么工作的——函数的堆栈框架/嵌入式代码的更多相关文章
- 20135202闫佳歆--week2 操作系统是如何工作的--学习笔记
此为个人学习笔记存档 week 2 操作系统是怎么工作的 一.计算机是如何工作的?--三个法宝 (一)三个法宝 1.存储程序计算机 所有计算机的基础性的逻辑框架. 2.函数调用堆栈 在低级语言中并不很 ...
- 20135220谈愈敏Blog2_操作系统是如何工作的
操作系统是如何工作的 谈愈敏 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 计 ...
- 20135327郭皓——Linux内核分析第二周 操作系统是如何工作的
操作系统是如何工作的 上章重点回顾: 计算机是如何工作的?(总结)——三个法宝 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的 ...
- 《Linux内核分析》第二周 操作系统是如何工作的?
[刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK TWO(2 ...
- Linux内核分析——操作系统是如何工作的
万子惠 + 原创作品转载请注明出处 + <Linux内核分析> 实验部分 使用实验楼的虚拟机打开shell 然后cd mykernel 您可以看到qemu窗口输出的内容的代码mymain. ...
- Linux内核分析第二周学习总结:操作系统是如何工作的?
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.函数调用堆栈 ...
- Linux内核分析之操作系统是如何工作的
在本周的课程中,孟老师主要讲解了操作系统是如何工作的,我根据自己的理解写了这篇博客,请各位小伙伴多多指正. 一.知识点总结 1. 三个法宝 存储程序计算机:所有计算机基础性的逻辑框架. 堆栈:高级语言 ...
- Linux操作系统学习_操作系统是如何工作的
实验五:Linux操作系统是如何工作的? 学号:SA1****369 操作系统工作的基础:存储程序计算机.堆栈(函数调用堆栈)机制和中断机制 首先要整明白的一个问题是什么是存储程序计算机?其实存储程序 ...
- Linux内核及分析 第二周 操作系统是如何工作的?
计算机是如何工作的? 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算机来说并不那么重要,但有了高级语言及函 ...
随机推荐
- C# json提取多层嵌套到数组
string jsonText = "{'name':'test','phone':'18888888888','image':[{'name':'img1','data':'data1'} ...
- 使用NSOperation使用,创建线程中传递多个参数
参考:http://blog.csdn.net/dqjyong/article/details/7677557 参考:http://stackoverflow.com/questions/232761 ...
- MEF简单示例
原文地址: http://www.cnblogs.com/xiaokang088/archive/2012/02/21/2361631.html MEF 的精髓在于插件式开发,方便扩展. 例如,应用程 ...
- 黄聪:走进wordpress 详细说说template-loader.php
再看template-laoder.php,这个文件总共只有45行.它的作用是基于访问的URL装载正确的模板. 文件第六行,也是第一条语句,如下: if ( defined('WP_USE_THEME ...
- hbase读写流程
一. Hbase读流程 META表记录着表的原信息,根据rowkey查询META表,获取所在region信息 客户端去相应的regionServer查询数据,先查询memStore(memstore是 ...
- [JS]鼠标事件穿透的问题
今天制作登陆窗口的效果时碰到的一个问题,如下: 标签结构如下: <div id="loginFrame"> <form class="loginFram ...
- Shell_Oracle Erp和其他系统Interface资料传输通过Shell进行控制(案例)
2014-06-26 Created By BaoXinjian
- POJ 1155 TELE 背包型树形DP 经典题
由电视台,中转站,和用户的电视组成的体系刚好是一棵树 n个节点,编号分别为1~n,1是电视台中心,2~n-m是中转站,n-m+1~n是用户,1为root 现在节点1准备转播一场比赛,已知从一个节点传送 ...
- python(6)时间戳和北京时间互转,输出当前的时间和推到七天前的日期
项目发展的需要:(包含时间函数)time datetime 时间戳和北京时间互转 import time import datetime s = '2015-04-17 11:25:30' d = d ...
- centos7编译安装nginx1.8
安装pcre wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.gz tar -zxvf pcre-8. ...
