指令段间及文件间参数调用过程(64位 Intel架构)

news2024/9/21 2:35:46

指令段间及文件间参数调用过程(64位 Intel架构)

文章目录

  • 指令段间及文件间参数调用过程(64位 Intel架构)
    • 一. 指令段间的参数调用过程
      • 1.1 推论
      • 1.2 验证
    • 二. 文件间的参数调用过程
      • 2.1 推论
      • 2.2 验证
    • 三. 指令解释相关补充

一. 指令段间的参数调用过程

1.1 推论

在汇编中,当一个指令段B调用指令段A的数据,是如何实现的呢?

首先指令段是由多个汇编指令集合而成(指令由操作码和操作数构成)。

而当指令段间调用参数,先需要一个指令段调用另一个指令段,换句话说,需要该指令段中的一个汇编指令调用另一个指令段名称,这里通过call指令调用(相关作用可看最后指令补充)如下图所示

在这里插入图片描述

而当指令段B调用指令段A相关数据时,可通过下面2种方式即可完成:

  1. 通过寄存器来相互调用

在这里插入图片描述

  1. 通过栈本身特性来进行调用:通过ebp指针移动,获取相关数据(32位机汇编可看到,读者可自行下载32位库,来进行实验)

在这里插入图片描述

以上为推论,下面通过C语言来进行验证

1.2 验证

编写一段2个指令段之间数据调用的C代码

#include <stdio.h>

int sum(int a, int b, int c){
        return a + b + c;
};
int main(){
        sum(1,2,3);
        return 1;
}

在Linux上,将代码编译成汇编代码

// -S 只编译
// -fno-asynchronous-unwind-tables 忽略调试代码
[root@localhost c-demo]# gcc -S -fno-asynchronous-unwind-tables lab.c

汇编代码

从下方代码可看出,main数中,将3个数据存放在寄存器中,sum通过寄存器取值并赋予在新开辟的栈空间中

ps:利用栈空间本身传递数值,可自行下载32位库进行操作

	.file	"lab.c"				// 文件名
	.text						// 代码段
	.globl	sum					// 全局 sum
	.type	sum, @function		// sum的类型为函数
sum:
	pushq	%rbp				// 开辟栈空间,并让bp(栈基址)指向该地址
	movq	%rsp, %rbp			// 让sp(栈针)指向bp所指向的地址
	movl	%edi, -4(%rbp)		// 开辟4字节大小的空间,并把edi里的值传送到该空间内
	movl	%esi, -8(%rbp)
	movl	%edx, -12(%rbp)
	movl	-4(%rbp), %edx		// 将第一个开辟的4字节空间的值存放到edx中
	movl	-8(%rbp), %eax      // 将第二个开辟的4字节空间的值存放到eax中
	addl	%eax, %edx			// 累加到edx中
	movl	-12(%rbp), %eax		// 将第三个开辟的4字节空间的值赋值到eax中
	addl	%edx, %eax			// 将edx值累加到eax中
	popq	%rbp				// 还原bp
	ret							// 返回
main:	
	pushq	%rbp				
	movq	%rsp, %rbp			
	movl	$3, %edx			// 将3存放到edx
	movl	$2, %esi
	movl	$1, %edi
	call	sum					// 调用sum指令段
	movl	$1, %eax			// 将产生的立即数丢给eax中
	popq	%rbp	
	ret

二. 文件间的参数调用过程

2.1 推论

若文件间调用,则需要其中一个文件调用另一个文件参数,这里就需要用到c语言中的关键字extern来指定所需调用的参数。

2.2 验证

编写2个C文件

demo.c

#include <stdio.h>
extern int data;
int sum(){
        return data;
}
int main(){
        sum();
        return 1;
}      

ex.c

int data = 1;

编写后,将两个文件进行编译

[root@localhost c-demo]#gcc -S -fno-asynchronous-unwind-tables demo.c
[root@localhost c-demo]#gcc -S -fno-asynchronous-unwind-tables ex.c

执行demo.c文件

[root@localhost c-demo]#gcc demo.s
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: /tmp/ccnjTTw2.o: in function `sum':
demo.c:(.text+0x6): undefined reference to `data'
collect2: error: ld returned 1 exit status

单独执行demo.s文件会报错,因为不知道data是从哪个文件提取。

这时我们将2个汇编文件一起编译即可

[root@localhost c-demo]#gcc demo.s ex.s

三. 指令解释相关补充

call指令:保存当前过程链接地址,并调用指定指令段地址

摘自Intel手册 volume 2 Chapter3.2
在这里插入图片描述

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

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

相关文章

基于html+css的图片展示24

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

docker安装rocketMQ

1、安装jkd1.8 docker pull java:8 或者 docker pull openjdk:8 查看已安装的镜像&#xff1a; docker images 运行jdk命令 docker run -d -it --name java-8 java:8 进入JDK 容器 docker exec -it java-8 /bin/bash 查看java版本&#xff0c;进入java-8容器后输入 &#x…

金融数字新型基础设施创新开放联合体今日成立

4月18日&#xff0c;“金融数字新型基础设施创新开放联合体”&#xff08;以下简称&#xff1a;联合体&#xff09;在上海成立。联合体由上海银行、复旦大学金融科技研究院、中电金信共同发起&#xff0c;首批成员单位汇聚产业链与供给侧的中坚力量&#xff1a;国泰君安证券、太…

基于 BaiduAI 的人脸检测系统(PyQt5图形化界面实现)

文章目录 写在前面的话总体结构学生端教师端教务处系统 总结 写在前面的话 前几天有个小伙伴私我会不会做关于人脸检测与识别的小项目&#xff0c;奈何我现在主要是学习研究NLP了&#xff0c;所以关于CV的很多东西也有点力不从心&#xff0c;突然想起来去年我的毕业设计就是做…

【Vue】学习笔记-内置指令/自定义指令

内置指令 自定义指令 内置指令v-text 指令v-html指令v-cloak指令v-once指令v-pre指令 自定义指令 内置指令 我们学过的指令&#xff1a; v-bind : 单向绑定解析表达式, 可简写为 :xxx v-model : 双向数据绑定 v-for : 遍历数组/对象/字符串 v-on : 绑定事件监听, 可简写为 v…

遍历思路与子问题思路:详解二叉树的基本操作

二叉树的结构定义&#xff1a; public class BinaryTree {//内部类 表示一个结点static class TreeNode {TreeNode left; //左子树TreeNode right; //右子树char value; //结点值TreeNode(char value) {this.value value;}}public TreeNode root; //根节点... } …

云原生时代下,应用全生命周期管理之道

引言 过去 10 年间&#xff0c;云计算已经从单一的 IT 服务演变成为新一代的软件架构范式&#xff0c;进而赋能企业管理和生产模式的创新。云计算也经历了从“资源上云”到“深度用云”的发展阶段。 在云原生时代&#xff0c;应用全生命周期管理之道成为企业关注的一个焦点。在…

蓝牙耳机什么品牌的音质好?300左右音质最好的蓝牙耳机推荐

随着蓝牙技术的发展&#xff0c;蓝牙耳机品牌也越来越多。要说什么品牌的音质好&#xff1f;首先还是要根据自己的预算出发。在此&#xff0c;我来给大家推荐几款300左右音质最好的蓝牙耳机&#xff0c;可以当个参考。 一、南卡小音舱Lite2蓝牙耳机 参考价&#xff1a;239 发…

Self-supervised learning of a facial attribute embedding from video

Self-supervised learning of a facial attribute embedding from video 译题&#xff1a;视频中人脸属性嵌入的自监督学习 论文题目Self-supervised learning of a facial attribute embedding from video译题视频中人脸属性嵌入的自监督学习时间2018年开源代码地址https://…

《Java》基本类型的比较和引用类型的比较

目录 基本类型 引用数据类型 基本类型之间的比较 基于Comparable的比较 总结 &#x1f451;作者主页&#xff1a;Java冰激凌 &#x1f4d6;专栏链接&#xff1a;Java 基本类型 Java中提供了基本类型有八种 分别是 byte short int long float double char boolean 基本类型…

EL 表达式--各种运算-代码演示--EL 的 11 个隐含对象--pageContext 对象介绍--JSTL 标签库介绍--core 核心库--综合代码

目录 EL 表达式 EL 表达式介绍 代码示例 EL 常用输出形式 代码演示 Book.java el_input.jsp EL 运算操作 基本语法语法&#xff1a; 关系运算 逻辑运算 算数运算 EL 的 empty 运算 应用实例 empty.jsp EL 的三元运算 应用实例 EL 的 11 个隐含对象&#xff0c…

Unity-ML-Agents-训练生成的results文件解读-PushBlock

前言 训练结果文件路径&#xff1a;E:\ml-agents-release_19\results\push_block_test_02&#xff08;具体路径以自己电脑为准&#xff09; ML-Agents安装和PushBlock训练过程请见&#xff1a;&#xff08;注意&#xff1a;push_block_test_02没有全部训练完毕&#xff09; …

同样是测试,朋友到了30k,我才12K,这份测试面试8股文确实牛

程序猿在世人眼里已经成为高薪、为人忠诚的代名词。 然而&#xff0c;小编要说的是&#xff0c;不是所有的程序员工资都是一样的。 世人所不知的是同为程序猿&#xff0c;薪资的差别还是很大的。 众所周知&#xff0c;目前互联网行业是众多行业中薪资待遇最好的&#xff0c;…

推荐几款项目管理工具,提高你的团队协作效率

如何管理团队才能使团队发挥最大的价值&#xff0c;如果团队缺少协作&#xff0c;就会因为团队的内耗和冲突导致项目无法完成&#xff0c;如何提高团队协作效率呢&#xff1f;我们可以借助团队协作类的项目管理工具。 几个常见的项目管理工具&#xff1a; 1、进度猫 进度猫是…

MySQL高级第十五篇:MVCC多版本并发控制原理剖析

MySQL高级第十五篇&#xff1a;MVCC多版本并发控制原理剖析 一、什么是MVCC&#xff1f;二、快照读与当前读&#xff1f;1. 快照读2. 当前读 三、MVCC实现原理&#xff08;ReadView&#xff09;1. 隐藏字段2. Read View3. 思路设计4. ReadView使用规则5. MVCC整体操作流程 四、…

响应式开发HTML5CSS3实现视频播放器的功能案例

目录 前言 一、本视频播放器需要实现的功能 ​二、代码分布结构 三、部分主要代码 1.index01.html 2.video1.css 3.video1.js 四、images图片资源及视频 五、运行效果 前言 1.本文讲解的响应式开发技术&#xff08;HTML5CSS3Bootstrap&#xff09;的HTML5视频播放器等…

随想录Day59--单调栈: 503.下一个更大元素II , 42. 接雨水

看到下一个更大&#xff0c;最先想到的就是单调栈。所以503.下一个更大元素II可以用单调栈的思路进行求解&#xff0c;其实这道题和496.下一个更大元素 I的思路是一样的&#xff0c;不过是多了一个首位相连的环状条件&#xff0c;这时候可以想到&#xff0c;把数组再复制遍历&a…

推荐系统|多目标建模|多目标优化|跨域多目标算法演进

目录 多目标建模总结 推荐系统——多目标优化 网易严选跨域多目标算法演进 背景介绍 多目标建模及优化 1.样本与特征 2. 模型结构迭代 3. 位置偏差与 Debias 4. 多目标 Loss 优化 5. 跨域多目标建模 多目标建模总结 http://t.csdn.cn/H514i 常见的指标有点击率CTR、…

电、气物联网联合管理监测方案

一、概述 水、电、气联合管理就是把同一个用户的用电计量和用水计量、用气计量统一到一个账户&#xff08;同时具有子账户&#xff09;&#xff0c;用一套软件进行统一管理&#xff0c;当账户余额不足时&#xff0c;可实行停电催费&#xff0c;从而既达到预付费的目的&#xff…

hue源码编译,替换cloudera manage hue,解决hue滚动条bug问题

一.安装依赖 yum install python python-dev python-setuptools python-pip \ libkrb5-dev libxml2-dev libxslt-dev libssl-dev \ libsasl2-dev libsqlite3-dev libldap2-dev \ libffi-dev nodejs npm cmake make gcc g++ 二.拉取源码 wget https://github.com/cloudera/hue/a…