因为操作系统共享性质,所以,寄存器已成为各种处理或共享资源的处理。然后,该过程发生 当所谓的。假设呼叫者使用内部寄存器值。但这个寄存器的内容,很可能在该呼叫者的执行的过程中改变,用过程执行之前,对该寄存器里面的内容进行保护,以至于不会出错,寄存器的保护规则也是由于程序的不可再现性而存在的。

在IA32上,实行了一个统一的寄存器保护规则。首先,我们要看一下。计算机中有多少个比較重要的寄存器

(偷偷懒我就不写寄存器前面的百分号了O(∩_∩)O)

eax 这个寄存器属于调用者保存寄存器,通经常使用来存储一些函数的返回值

edx ecx这两个也是属于调用者保存寄存器,而且 属于通用寄存器,能够任意保存数据,没有 什么特定的 限制。

ebx edi esi这三个寄存器属于被调用者保存寄存器。通常来说edi 和 esi可能会保存一些被调用函数的參数。

这里要说明一下一个概念,就是我非常疑惑的,什么叫做调用者保存寄存器。什么叫做被调用者保存寄存器。

两者的差别,我认为能够用以下的图示来说明一下。

上面的图示说明 ,寄存器依照规则被分类了。左面的三个寄存器是调用者负责保存,右边三个寄存器是被调用者负责保存。也就是说,在过程调用的时候。假设被调用者程序会覆盖左边三个寄存器的内容,那么,假设这三个寄存器内容在过程调用结束之后还要用到没调用过程之前的那个数值的话,就要有人在过程调用发生之前保存这个寄存器里面的数值,可是由谁来保存呢?仅仅能由调用者去保存,也就是说。被调用者是不会管你这里面有什么重要的数据的。他拿过来就用。可是调用者假设须要这里面的数据。就要自己提前保存。

说的再直白一点,就是寄存器是不论什么程序都能够随便用的,可是里面数据的保存工作就是有责任人的。左边三个寄存器的责任人是调用者。右边三个寄存器的责任人是被调用者。

我认为这样理解是正确的,假设我恰好理解反了,还希望大家给我指出来。

还有两个比較重要的寄存器:

esp是栈顶指针的寄存器

ebp是基址寄存器


学过汇编的人会知道,在进行过程调用的时候,主要是用程序栈来支持过程的调用。而且机器也会利用栈来存储一些參数。

这样一来,在过程调用中,上面两个寄存器里面的数据就变得相当重要。在一个过程调用的时候,必需要保存旧的ebp里面的数据,而且初始化的时候也需要movl ebp esp这种指令将两个栈指针初始化一下,之后,esp会随着过程的调用进行扩展增长。在过程调用结束的时候。要有一些指令进行恢复和清理工作。把栈恢复成这次调用之前的样子。那么我们就要进行例如以下 两个指令

mov ebp esp
popl ebp
第一条指令是清理工作,也就是释放栈空间,把栈顶指针移动到基址指针的地方,由于在call指令运行的时候,调用者会把被调用过程完毕之后下一条指令的地址压入栈中。所以,在popl将旧的基地址恢复之后。esp也就向栈低移动 到下一个指令的地址到那里运行。作为一个恢复和清理通话完成后,将结束。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

IAA32过程调用保护规则注册的更多相关文章

  1. 从汇编角度分析C语言的过程调用

    ➠更多技术干货请戳:听云博客 基本术语定义 1.系统栈(system stack)是一个内存区,位于进程地址空间的末端. 2.在将数据压栈时,栈是自顶向下增长的,该内存区用于函数的局部变量提供内存.它 ...

  2. Thrift架构~从图中理解thrift,它事实上是一种远程过程调用

    thrift为我们简化了tcp通讯,它可以使用我们方便的建立各种语言的服务端与客户端,并实现客户端对服务器的远程过程调用,简单的说就是服务器通过thrift架构对外开放一些接口,并自己实现这些接口,如 ...

  3. ARM过程调用标准---APCS简单介绍

    介绍 APCS,ARM 过程调用标准(ARM Procedure Call Standard),提供了紧凑的编写例程的一种机制,定义的例程能够与其它例程交织在一起.最显著的一点是对这些例程来自哪里没有 ...

  4. 【CSAPP笔记】7. 汇编语言——过程调用

    一个过程调用包括将数据(以参数和返回值的形式)与控制从代码的一部分传递到另一部分.除此之外,在进入时为过程的局部变量分配空间,在退出的时候释放这些空间.数据传递.局部变量的分配和释放通过操纵程序栈来实 ...

  5. SQL Server 2008 安装过程中遇到“性能计数器注册表配置单元一致性”检查失败 问题的解决方法

    操作步骤: 1. 在 Microsoft Windows 2003 或 Windows XP 桌面上,依次单击"开始"."运行",然后在"打开&quo ...

  6. RPC-远程过程调用协议

    远程过程调用协议 同义词 RPC一般指远程过程调用协议 RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要 ...

  7. 无效的过程调用或参数: 'Instr'解决方法

    以前我一直使用ASP无组件上传类来上传文件.但是今天又个客户反映说.不能上传.出现错误.,但在我电脑上测试没问题.后来发现客户用的是IE8 于是开始找解决方法 错误如下:Microsoft VBScr ...

  8. Wayland中的跨进程过程调用浅析

    原文地址:http://blog.csdn.net/jinzhuojun/article/details/40264449 Wayland协议主要提供了Client端应用与Server端Composi ...

  9. (转)platform_driver_register,什么时候调用PROBE函数 注册后如何找到驱动匹配的设备

     platform_driver_register,什么时候调用PROBE函数 注册后如何找到驱动匹配的设备 2011-10-24 19:47:07 分类: LINUX   kernel_init中d ...

随机推荐

  1. JAVA Concurrent包 中的并发集合类

    我们平时写程序需要经常用到集合类,比如ArrayList.HashMap等,但是这些集合不能够实现并发运行机制,这样在服务器上运行时就会非常的消耗资源和浪费时间,并且对这些集合进行迭代的过程中不能进行 ...

  2. js进阶 12-2 彻底弄懂JS的事件冒泡和事件捕获

    js进阶 12-2 彻底弄懂JS的事件冒泡和事件捕获 一.总结 一句话总结:他们是描述事件触发时序问题的术语.事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件.相反的,事件 ...

  3. 正确理解Spring事务和数据库事务和锁

    Lock wait timeout exceeded; try restarting transaction解决方案 参考文章 Spring中@Transactional事务回滚 http://www ...

  4. Android String与十六进制数互转

    /** * 字符串转换成十六进制字符串 * @param String str 待转换的ASCII字符串 * @return String 每个Byte之间空格分隔,如: [61 6C 6B] */ ...

  5. Java 开源博客——B3log Solo 0.6.6 正式版发布了!

    Java 开源博客 -- B3log Solo 0.6.6 正式版发布了!欢迎大家下载. 该版本引入了数据库连接池:Druid. 另外,欢迎观摩 B3log 团队的新项目:Noty,也非常欢迎大家参与 ...

  6. win7注册表常用设置

    win7注册表常用设置 一.总结 一句话总结:regedit可以修改很多东西,电脑时间,背景,u盘读写,鼠标右键情况. 二.win7注册表常用设置 一. 秀出自我风格的屏幕保护画面 1.气泡屏幕保护 ...

  7. [Vue] Get up and running with vue-router

    How do we set up a simple app with its own routes with their own components in Vue? Install: npm i - ...

  8. Delphi程序的自我修改

    前言:     对于Delphi在编译时对代码所做的工作,大部分使用Object Pascal之类的高级语言的程序员并不是很熟悉.如果你对汇编程序以及EXE文件格式有一点基本认识,那么源代码里包含的注 ...

  9. Thermally driven workload scheduling in a heterogeneous multi-processor system on a chip

    Various embodiments of methods and systems for thermally aware scheduling of workloads in a portable ...

  10. 监控Nginx服务的Shell脚本

    Nginx 虽然处理并发量比 apache 确实要强点,但它这种 php-cgi 模式不是太稳定,这点网上也有朋友总结了,我在实现项目中也感受到了. 我们一台支付机,偶尔会出现以下情况的:php-cg ...