函数的堆栈

一、函数的类型
1、 叶子函数

C代码

void test(){
    int a = 2;
    int b = 3;
}

void func(){
    int a = 4;
    int b = 5;
    test();
}



test的汇编代码

   sub sp, sp, #16           ;=16
     orr w8, wzr, #0x3
     orr w9, wzr, #0x2
     str w9, [sp,  #12]
     str w8,  [sp,  #8]

     add sp, sp, #16       ;=16

     ret

 



2、⾮叶子函数
函数里面会调用其他的函数

func的汇编代码

    sub  sp, sp, #32             ; =32
    stp    x29, x30, [sp, #16]     ; 8-byte Folded Spill
    add    x29, sp, #16            ; fp = sp + 16

    mov    w8, #5
    orr    w9, wzr, #0x4
    stur 4, [x29, #-4]
    str    5, [sp, #8]
    bl    _haha

    ldp    x29, x30, [sp, #16]     ; 8-byte Folded Reload
    add    sp, sp, #32             ; =32
    ret

 

转载于:https://www.cnblogs.com/gkp307/p/10738589.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值