IAA32过程调用保护规则注册
因为操作系统共享性质,所以,寄存器已成为各种处理或共享资源的处理。然后,该过程发生 当所谓的。假设呼叫者使用内部寄存器值。但这个寄存器的内容,很可能在该呼叫者的执行的过程中改变,用过程执行之前,对该寄存器里面的内容进行保护,以至于不会出错,寄存器的保护规则也是由于程序的不可再现性而存在的。
在IA32上,实行了一个统一的寄存器保护规则。首先,我们要看一下。计算机中有多少个比較重要的寄存器
(偷偷懒我就不写寄存器前面的百分号了O(∩_∩)O)
eax 这个寄存器属于调用者保存寄存器,通经常使用来存储一些函数的返回值
edx ecx这两个也是属于调用者保存寄存器,而且 属于通用寄存器,能够任意保存数据,没有 什么特定的 限制。
ebx edi esi这三个寄存器属于被调用者保存寄存器。通常来说edi 和 esi可能会保存一些被调用函数的參数。
这里要说明一下一个概念,就是我非常疑惑的,什么叫做调用者保存寄存器。什么叫做被调用者保存寄存器。
两者的差别,我认为能够用以下的图示来说明一下。
上面的图示说明 ,寄存器依照规则被分类了。左面的三个寄存器是调用者负责保存,右边三个寄存器是被调用者负责保存。也就是说,在过程调用的时候。假设被调用者程序会覆盖左边三个寄存器的内容,那么,假设这三个寄存器内容在过程调用结束之后还要用到没调用过程之前的那个数值的话,就要有人在过程调用发生之前保存这个寄存器里面的数值,可是由谁来保存呢?仅仅能由调用者去保存,也就是说。被调用者是不会管你这里面有什么重要的数据的。他拿过来就用。可是调用者假设须要这里面的数据。就要自己提前保存。
说的再直白一点,就是寄存器是不论什么程序都能够随便用的,可是里面数据的保存工作就是有责任人的。左边三个寄存器的责任人是调用者。右边三个寄存器的责任人是被调用者。
我认为这样理解是正确的,假设我恰好理解反了,还希望大家给我指出来。
还有两个比較重要的寄存器:
esp是栈顶指针的寄存器
ebp是基址寄存器
这样一来,在过程调用中,上面两个寄存器里面的数据就变得相当重要。在一个过程调用的时候,必需要保存旧的ebp里面的数据,而且初始化的时候也需要movl ebp esp这种指令将两个栈指针初始化一下,之后,esp会随着过程的调用进行扩展增长。在过程调用结束的时候。要有一些指令进行恢复和清理工作。把栈恢复成这次调用之前的样子。那么我们就要进行例如以下 两个指令
版权声明:本文博客原创文章。博客,未经同意,不得转载。
IAA32过程调用保护规则注册的更多相关文章
- 从汇编角度分析C语言的过程调用
➠更多技术干货请戳:听云博客 基本术语定义 1.系统栈(system stack)是一个内存区,位于进程地址空间的末端. 2.在将数据压栈时,栈是自顶向下增长的,该内存区用于函数的局部变量提供内存.它 ...
- Thrift架构~从图中理解thrift,它事实上是一种远程过程调用
thrift为我们简化了tcp通讯,它可以使用我们方便的建立各种语言的服务端与客户端,并实现客户端对服务器的远程过程调用,简单的说就是服务器通过thrift架构对外开放一些接口,并自己实现这些接口,如 ...
- ARM过程调用标准---APCS简单介绍
介绍 APCS,ARM 过程调用标准(ARM Procedure Call Standard),提供了紧凑的编写例程的一种机制,定义的例程能够与其它例程交织在一起.最显著的一点是对这些例程来自哪里没有 ...
- 【CSAPP笔记】7. 汇编语言——过程调用
一个过程调用包括将数据(以参数和返回值的形式)与控制从代码的一部分传递到另一部分.除此之外,在进入时为过程的局部变量分配空间,在退出的时候释放这些空间.数据传递.局部变量的分配和释放通过操纵程序栈来实 ...
- SQL Server 2008 安装过程中遇到“性能计数器注册表配置单元一致性”检查失败 问题的解决方法
操作步骤: 1. 在 Microsoft Windows 2003 或 Windows XP 桌面上,依次单击"开始"."运行",然后在"打开&quo ...
- RPC-远程过程调用协议
远程过程调用协议 同义词 RPC一般指远程过程调用协议 RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要 ...
- 无效的过程调用或参数: 'Instr'解决方法
以前我一直使用ASP无组件上传类来上传文件.但是今天又个客户反映说.不能上传.出现错误.,但在我电脑上测试没问题.后来发现客户用的是IE8 于是开始找解决方法 错误如下:Microsoft VBScr ...
- Wayland中的跨进程过程调用浅析
原文地址:http://blog.csdn.net/jinzhuojun/article/details/40264449 Wayland协议主要提供了Client端应用与Server端Composi ...
- (转)platform_driver_register,什么时候调用PROBE函数 注册后如何找到驱动匹配的设备
platform_driver_register,什么时候调用PROBE函数 注册后如何找到驱动匹配的设备 2011-10-24 19:47:07 分类: LINUX kernel_init中d ...
随机推荐
- FZU 1650 1752 a^b mod c
http://acm.fzu.edu.cn/problem.php?pid=1752 http://acm.fzu.edu.cn/problem.php?pid=1650 给跪了. 我的快速幂会越界. ...
- CAP理论/AP架构/CP架构
原文地址:https://blog.csdn.net/u013058742/article/details/83541905 简书里的文章:Spring Cloud Eureka简介及与Zook ...
- 【u123】最大子段和
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 给出一段序列,选出其中连续且非空的一段使得这段和最大. [输入格式] 输入文件maxsum1.in的第 ...
- Spring Tool Suite(STS)加速
Java开发首选技术是Spring,使用Spring技术首选的开发工具是STS,STS有许多加速spring开发的提示和快捷方式,并将spring的最新技术通过STS快速简单的传递给用户. 但是STS ...
- fastjson排序 Map多层嵌套转换自动排序问题终极解决方案
阅读更多 最近项目中用到了fastjson(1.2.15)需要将前端多层嵌套json转换为map,由于map的无序性,想了很多办法,最终找到使用 Map m= JSONArray.parseObjec ...
- Java基本数据类型的取值范围
版权声明:本文为博主原创文章,未经博主允许不得转载. 先看一段代码public class Hello{ public static void main(String[] args){ ...
- 【39.29%】【codeforces 552E】Vanya and Brackets
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(4)for == while ?
一.for和while等价替换 int i = 1; for (i; i<=100; i++){ sum = sum + 1; } int i = 1; while(i<=100){ su ...
- Android 三种方式实现自定义圆形进度条ProgressBar
一.通过动画实现 定义res/anim/loading.xml如下: <?xml version="1.0" encoding="UTF-8"?> ...
- js进阶 9-9 html控件如何实现回车键切换焦点
js进阶 9-9 html控件如何实现回车键切换焦点 一.总结 一句话总结:在onkeydown事件中判断event对象的键位码,然后focus事件. 二.js进阶 9-9 html控件如何实现回车键 ...