Machine-Level Programming III:Procedure

news2024/11/16 7:55:20

Machine-Level Programming III:Procedure

Today

  • Procedures
    • Mechanisms(机制)
    • Stack Structure
    • Calling Conventions(调用规则)
      • Passing control(传递控制)
      • Passing data(传递数据)
      • Managing local data
    • Illustration of Recursion(递归说明)

补充术语:
Program 程序员写的一个完整程序代码
Procedure 就是程序中一段完成一定功能的代码
Process 就是一个完整的程序加载到内存中运行的形式,是正在运行的处于动态的program

Mechanisms in Procedures(总体机制学习)

  • passing control
    • To beignning of procedure code
    • Back to return point
  • passing data
    • Procedure arguments
    • Return value
  • Memory management
    • Allocate during procedure excution
    • Deallocate upon return
  • Mechanisms all implemented with machine instructions
  • x86-64 implementation of a procedure uses only those mechanisms required

解读:
程序机制包括:传递控制、传递数据和内存分配三个部分。
这些机制都是由机器指令实现的,x86-64在程序中使用的机制只有以上这些。

调用控制: 开始时跳转到代码段开头+结束后跳转回调用位置
调用数据: 代码段使用到的参数+返回值、
内存安排: 代码段执行过程中分配内存+返回时解除分配
三个机制分别各由一半在调用开始时,一半在调用结束返回时。

Machine instructions implement the mechanisms, but the choices are determined by designers. These choices make up the Application Binary Interface(ABI)

Stack Structure(调用中要使用的存储方式)

Region of memory managed with stack discipline(规则)
There are two points. Firstly, Memory viewed as array of bytes. Secondly, Different regions have different purpose.(Like ABI, a policy decision)

栈向小地址生长。

相关指令

pushq Src
//从Src获取操作数,栈顶(%rsp)自减,操作数写入栈顶
popq Dest
//从栈顶读数据,存到Dest,栈顶自增

作为存储

Calling Coventrol

Passing control

Ues stack to support procesure call and return

Procedure call: call lable
//返回地址(调用位置的下一条指令)压栈,跳转到标签处
Procedure return: ret
//弹出返回地址,跳转到返回地址
//过程中通过修改%rip的值实现跳转!!!

Procedure Data Flow(Passing data)

寄存器的使用:
前六个参数:%rdi %rsi %rdx %rcx %r8 %r9
返回值:%rax
Stack: 向小地址生长。参数7到参数n存入栈中,7最靠近栈底。(Only allocate stack space when needed)

Managing local data

Languages that support recursion(递归) must be “Reentrant”(可重入):multiple simultaneous instantiations of single procedure(单个过程的多个实例化)
Need some place to store state of each instantiation from when called to when return

  • Arguments
  • Local variables
  • Return pointer
    stack allcoated in Frames(按帧分配的堆栈)state for single procedure instantiation

Stack Frames

Contents:

  • Return information
  • Local storage (if needed)
  • Temporary space (if needed)

Management is done by “call” and “ret”
Frame Pointer: %rbp (Optional)
Stack Pointer: %rsp

栈帧解读:(有很多理解关键点)
在这里插入图片描述

Whenever we enter a new procedure, we have to deal with two Frames: Current Stack Frame and Caller Stack Frame.
notes1:此次call的参数的构建是在调用者帧里完成的。
notes2:被调用者的参数是可选项,当它是叶函数(不调用其它函数的函数)时,不需要存储参数构建和当前栈帧指针(%rbp),当

在这里插入图片描述

解读:对于过程(procedure)的使用,需要进行实例化(instantiations)。
为每个实例分配的内存包含三个部分(参数、本地变量、返回指针,前两者需要时才会分配),此时堆栈是按照帧分配的。

thinking

Why push %rbx

在这里插入图片描述

Why mov $rdx %rbx

在这里插入图片描述

What is done by call instruction

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1205822.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Haskell添加HTTP爬虫ip编写的爬虫程序

下面是一个简单的使用Haskell编写的爬虫程序示例,它使用了HTTP爬虫IP,以爬取百度图片。请注意,这个程序只是一个基本的示例,实际的爬虫程序可能需要处理更多的细节,例如错误处理、数据清洗等。 import Network.HTTP.Cl…

【中间件篇-Redis缓存数据库08】Redis设计、实现、redisobject对象设计、多线程、缓存淘汰算法

Redis的设计、实现 数据结构和内部编码 type命令实际返回的就是当前键的数据结构类型,它们分别是:string(字符串)hash(哈希)、list(列表)、set(集合)、zset (有序集合),但这些只是Redis对外的数据结构。 实际上每种数据结构都有自己底层的…

hadoop 虚拟机配置大数据环境 hadoop(二)

1. 安装epel-release 注:Extra Packages for Enterprise Linux 是为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS 和Scientific Liux。相当于是一个软件仓库,大多数rpm 包在官方repository 中是找不到的) 命令: yum install -y epel-relea…

swagger精度丢失,postman调用正常,dameng数据库,long类型字段

问题出现 我们目前在迁移环境,然后往另带一个公司提供的框架里面迁移,然后就出现了很多问题,一个问题是我们返回的某个列表数据,在使用postman 的时候调用正常,但是当前端在制作页面的时候出现问题,并且sw…

一文带你深度体验DevChat

目录 🚀DevChat基本介绍 🕍 概述 🕍 优势 🕍 功能概述 🚀DevChat的安装 🕍 安装依赖软件 🕍 VS Code安装插件 🕍 获取和设置Access Key 🕍 版本不兼容处理【BU…

Linux系统中如何开启和配置OpenGauss数据库的远程连接(1)

文章目录 前言1. Linux 安装 openGauss2. Linux 安装cpolar3. 创建openGauss主节点端口号公网地址4. 远程连接openGauss5. 固定连接TCP公网地址6. 固定地址连接测试 前言 openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行。openGauss内核深度融合…

【python自动化】Playwright基础教程(六)事件操作③单击双击计数过滤截图JS注入

【python自动化】Playwright基础教程(六)事件操作③单击&双击&计数&过滤&截图&JS注入 本文目录 文章目录 【python自动化】Playwright基础教程(六)事件操作③单击&双击&计数&过滤&截图&JS注入playwright系列回顾前文代码点击 - click…

Git忽略文件.gitignore的使用

1.为什么使用? 当你使用git add .的时候有没有遇到把你不想提交的文件也添加到了缓存中去?比如项目的本地配置信息,如果你上传到Git中去其他人pull下来的时候就会和他本地的配置有冲突,所以这样的个性化配置文件我们一般不把它推送到git服务…

arcgis--消除坐标系信息的两种方法

方法一:在【目录】中右击待修改数据,选择【属性】,选择【XY坐标】选项卡,点击清楚按钮。 方法二:在【数据管理工具】-【投影与变换】-【定义投影】中清楚坐标系信息。如下:

每日一题:逆波兰表达式求值(后缀表达式)

这个题比较难理解的就是逆波兰表达式是什么东西,上面我贴了定义,这个题本身不难,只需要运用迭代器逐个访问,当为数字是存入栈中,是算符时就要取数出来进行运算,先取出的是右操作数,取出来以后用…

【done】剑指offer46_new:解密数字

题目:力扣165,https://leetcode.cn/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/description/ 现有一串神秘的密文 ciphertext,经调查,密文的特点和规则如下: 密文由非负整数组成 数字 0-25 分别对应字母 a-z 请…

Arthas(阿尔萨斯)--(二)

目录 一、Arthas学习 1、JVM相关命令一 1、dashboard 2、thread 3、jvm 4、sysprop 一、Arthas学习 Arthas(阿尔萨斯)--(一) Arthas代码开源地址 1、JVM相关命令一 1、dashboard dashboard:显示当前系统的实时数据面板,按q或ctrlc退出 ID: Java 级别的线…

自定义Graph Component:1.2-其它Tokenizer具体实现

本文主要介绍了Rasa中相关Tokenizer的具体实现,包括默认Tokenizer和第三方Tokenizer。前者包括JiebaTokenizer、MitieTokenizer、SpacyTokenizer和WhitespaceTokenizer,后者包括BertTokenizer和AnotherWhitespaceTokenizer。 一.JiebaTokenizer   Ji…

IDEA 2022创建Spring Boot项目

首先点击New Project 接下来: (1). 我们点击Spring Initializr来创建。 (2). 填写项目名称 (3). 选择路径 (4). 选择JDK------这里笔者选用jdk17。 (5). java选择对应版本即可。 (6). 其余选项如无特殊需求保持默认即可。 然后点击Next。 稍等一会&#xff0c…

RK3568平台开发系列讲解(Linux系统篇)Linux内核定时器详解

🚀返回专栏总目录 文章目录 一、系统节拍率二、内核定时器简介三、内核定时器API四、延时函数沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序、延时程序、对于我们驱动编写者来说最常用的定时器。硬件定…

敏感数据是什么?包含哪些?如何保障安全?

最近看到不少小伙伴在问,敏感数据是什么?包含哪些?如何保障安全?这里我们小编就给大家一一解答一下,仅供参考哦! 敏感数据是什么? 敏感数据,是指泄漏后可能会给社会或个人带来严重危…

2023亚太杯数学建模ABC题思路汇总分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料5 最后 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 2023年第十三…

新能源汽车三电系统上的VDA接口在操作空间有限时如何快速密封与连接

针对新能源汽车三电系统上的VDA接口的快速密封与连接,格雷希尔GripSeal快速接头有其对应的G90系列,但随着现在有些新能源汽车体型越来越小,其三电系统的体积也越来越小,相对应的它们各个接口之间的距离也就越来越近,其…

Find My冲浪板|苹果Find My技术与冲浪板结合,智能防丢,全球定位

冲浪板就是冲浪运动中必不可少的器材之一。冲浪板是一块能够承受波浪抛掷的器材,通常由泡沫材质制成,也有一些采用其他材质制成的高档板。冲浪板不仅能够帮助人们在波浪中快速滑行,还能提供重心支撑和掌控波浪的稳定性。电动冲浪板是一种新型…

Linux---(六)自动化构建工具 make/Makefile

文章目录 一、make/Makefile二、快速查看(1)建立Makefile文件(2)编辑Makefile文件(3)解释(4)效果展示 三、背后的基本知识、原理(1)如何清理对应的临时文件呢…