C++中函数参数如何传递给函数

文章详细解释了C++中函数参数如何通过寄存器和栈进行传递,展示了`main`函数中的变量赋值和在`myfunc`函数调用时参数的存储方式。首先,小数量参数通过rdi,rsi,rdx,rcx,r8,r9寄存器传递;当参数超过6个时,多余参数会存储在栈上以确保正确传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++中函数参数如何传递给函数

情况一

/* ************************************************************************
> File Name:     test.cpp
> Author:        niu0217
> Created Time:  Sun 04 Feb 2024 08:12:19 PM CST
> Description:
 ************************************************************************/

#include<iostream>
using namespace std;

int myfunc(int a, int b, int c, int d, int e, int f) {
    a = 10;
    b = 20;
    c = 30;
    d = 40;
    e = 50;
    f = 60;
    return 100;
}

int main()
{
    int a = 0;
    int b = 0;
    int c = 0;
    int d = 0;
    int e = 0;
    int f = 0;
    myfunc(a, b, c, d, e, f);
    return 0;
}

调试:

In file: /home/ubuntu/Dev/My优快云/test.cpp
   24     int b = 0;
   25     int c = 0;
   26     int d = 0;
   27     int e = 0;
   28     int f = 0;29     myfunc(a, b, c, d, e, f);
   30     return 0;
   31 }

pwndbg> disassemble
Dump of assembler code for function main():
   0x00005555555551b6 <+0>:	endbr64
   0x00005555555551ba <+4>:	push   rbp
   0x00005555555551bb <+5>:	mov    rbp,rsp
   0x00005555555551be <+8>:	sub    rsp,0x20
   0x00005555555551c2 <+12>:	mov    DWORD PTR [rbp-0x18],0x0 #a
   0x00005555555551c9 <+19>:	mov    DWORD PTR [rbp-0x14],0x0 #b
   0x00005555555551d0 <+26>:	mov    DWORD PTR [rbp-0x10],0x0 #c
   0x00005555555551d7 <+33>:	mov    DWORD PTR [rbp-0xc],0x0  #d
   0x00005555555551de <+40>:	mov    DWORD PTR [rbp-0x8],0x0  #e
   0x00005555555551e5 <+47>:	mov    DWORD PTR [rbp-0x4],0x0  #f
=> 0x00005555555551ec <+54>:	mov    r8d,DWORD PTR [rbp-0x4]
   0x00005555555551f0 <+58>:	mov    edi,DWORD PTR [rbp-0x8]
   0x00005555555551f3 <+61>:	mov    ecx,DWORD PTR [rbp-0xc]
   0x00005555555551f6 <+6
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落后的炫幕あ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值