函数的堆栈

一、函数的类型
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

猜你喜欢

转载自www.cnblogs.com/gkp307/p/10738589.html