首页 > 编程语言 >x86-64 汇编传参

x86-64 汇编传参

时间:2023-07-24 14:55:29浏览次数:27  
标签:传参 rcx x86 参数 寄存器 64 rsi

关于64位汇编的参数传递

当参数少于7个时, 参数从左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9。 当参数为7个以上时, 前 6 个与前面一样, 但后面的依次从 “右向左” 放入栈中,即和32位汇编一样。参数个数大于 7 个的时候

 H(a, b, c, d, e, f, g, h);

 a->%rdi,
 b->%rsi,
 c->%rdx,
 d->%rcx, 
 e->%r8,
 f->%r9
 h->8(%rsp)
 g->(%rsp)
 call H

x86_64 registers:

x86-64寄存器

特性要点:

  1)常用寄存器有16个,分为x86通用寄存器以及r8-r15寄存器。
  2)通用寄存器中,函数执行前后必须保持原始的寄存器有3个:是rbx、rbp、rsp。rx寄存器中,最后4个必须保持原值:r12、r13、r14、r15。
保持原值的意义是为了让当前函数有可信任的寄存器,减小在函数调用过程中的保存&恢复操作。除了rbp、rsp用于特定用途外,其余5个寄存器可随意使用。
  3)通用寄存器中,不必假设保存值可随意使用的寄存器有5个:是rax、rcx、rdx、rdi、rsi。其中rax用于第一个返回寄存器(当 然也可以用于其它用途),rdx用于第二个返回寄存器(在调用函数时也用于第三个参数寄存器)。rcx用于第四个参数。rdi用于第一个参数。rsi用于 第二个函数参数。
  4)r8、r9分配用于第5、第6个参数。

标签:传参,rcx,x86,参数,寄存器,64,rsi
From: https://www.cnblogs.com/corenick/p/17577235.html

相关文章

  • m基于扩频解扩+turbo译码的通信链路matlab误码率仿真,调制对比QPSK,16QAM,64QAM,扩频
    1.算法仿真效果matlab2022a仿真结果如下:      2.算法涉及理论知识概要       基于扩频解扩和Turbo编译码的通信链路误码率仿真,并比较了不同调制方式下的性能。首先,我们详细讨论了实现步骤,包括扩频解扩、调制、编码和译码等。然后,给出了相关的数学公式,包......
  • [CF1364E] X-OR
    X-OR题面翻译题目描述本题是交互题。有一个固定的长度为\(n\)的排列\(P\),其值域为\([0,n-1]\),你可以进行不超过\(4269\)次询问,之后你需要输出这个排列\(P\)。输入格式第一行有一个正整数\(n\),表示排列的长度。保证\(3\len\le2048\),\(0\leP_i\len-1\)。交互格......
  • x86架构BIOS攻击面梳理与分析
    x86架构BIOS攻击面梳理与分析之前的一份学习笔记,主要整理了一下x86架构下BIOS的一些攻击面,BootKit部分还没有搬上来。可能有一些理解存在疏漏的地方,还请看官老爷斧正。调研目标一、梳理安全启动的基本流程经历的过程软硬件层面需要完成的工作二、梳理攻......
  • 内核映射器(KernelMapper)开发-扩展KdMapper在Window 7 x64的支持
    1、背景  内核映射器有较多年历史了,其中KdMapper是比较著名的,原版中它使用intel的驱动漏洞可以无痕的加载未经签名的驱动。只不过当前只支持在Win10及Win11上运行,现在进行功能的修改以支持在Win7x64环境上。当前假定读者对KdMapper的原理比较了解并编译调试过相关代码。 2......
  • Sublime Text (Build 4143) x64 激活
    下载、安装SublimeText41、官方下载地址:https://www.sublimetext.com/download2、下载完成后,直接安装即可激活1、使用浏览器打开网站:https://hexed.it,点击【打开文件】2、打开SublimeText安装目录下的sublime_text.exe文件,在【搜索】中输入:807805000f94c1,按回车键。3......
  • Python和Java的BASE64操作
    Python中的操作1.1相关链接Python编码解码---字符集/base641.2举例说明在Python中,base64.b64encode()方法用于对给定的字节数据进行Base64编码。该方法接受一个bytes-like对象(例如字节数组或字节字符串)作为输入,并返回一个Base64编码的字节字符串。使用base64.b64encode()......
  • m基于扩频解扩+LDPC编译码的通信链路matlab误码率仿真,调制对比QPSK,16QAM,64QAM,扩频
    1.算法仿真效果matlab2022a仿真结果如下:     2.算法涉及理论知识概要      在现代通信系统中,扩频技术被广泛应用于数字通信链路中。扩频技术通过将要传输的信息序列与一个宽带的伪随机码序列进行卷积,将原始信号转换成一个具有更大带宽的扩频信号。在接收端......
  • 文心一言 VS 讯飞星火 VS chatgpt (64)-- 算法导论6.5 3题
    文心一言VS讯飞星火VSchatgpt(64)--算法导论6.53题三、要求用最小堆实现最小优先队列,请写出HEAP-MINIMUM、HEAP-EXTRACT-MIN、HEAPDECREASE-KEY和MIN-HEAP-INSERT的伪代码。文心一言:以下是使用最小堆实现最小优先队列的HEAP-MINIMUM、HEAP-EXTRACT-MIN、HEAP-DECREA......
  • java base64编码字符串
    JavaBase64编码字符串Base64是一种用于将二进制数据转换为可打印ASCII字符的编码方式。在Java中,我们可以使用Java提供的Base64类来进行Base64编码和解码操作。Base64编码和解码Base64编码将二进制数据转换为一组可打印的ASCII字符。这种编码方式通常用于在网络传输中传递二进制......
  • mysql 根据in 传参排序
    MySQL根据IN传参排序在MySQL中,我们经常需要根据给定的一组值来进行排序操作。而IN关键字正是用来筛选出一组指定值的数据。本文将详细介绍如何在MySQL中使用IN传参进行排序。什么是IN关键字IN关键字是MySQL中的一个操作符,用于指定一个值是否在一个指定的范围内。其基本语法如下:......