1. 程式人生 > 其它 >ARM C函式呼叫堆疊入棧順序

ARM C函式呼叫堆疊入棧順序

ARM C函式呼叫堆疊入棧順序

堆疊指標是在函式一開頭就確認了的,比如如下的xxx_func.cfi函式,它在函式的開頭就將sp自減了0x170,這個0x170是xxx_fun.cfi函式區域性變數total size + 需要入棧的reg total size

然後會設定x29(fp,棧底指標),這裡看到是sp - 0x110,可以看到需要入棧的reg total size為0x60,所以fp指向了函式區域性變數列表的頭部,它是不包含函式裡的區域性變數的

00000000000441c8 <xxx_func.cfi>:
   441c8:    d105c3ff     sub    sp, sp, #0x170
   441cc:    a9117bfd     stp    x29, x30, [sp,#
272] 441d0: a9126ffc stp x28, x27, [sp,#288] 441d4: a91367fa stp x26, x25, [sp,#304] 441d8: a9145ff8 stp x24, x23, [sp,#320] 441dc: a91557f6 stp x22, x21, [sp,#336] 441e0: a9164ff4 stp x20, x19, [sp,#352] 441e4: 910443fd add x29, sp, #
0x110 441e8: 90000008 adrp x8, 0 <__stack_chk_guard>

函式呼叫stack變化,入棧順序

以main()裡有int a、int b兩個區域性變數並call了一個test_func(int i, int j),在test_func()裡有define一個int c變數為例,來看下呼叫test_func()時的堆疊變化: