ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ARM C函数调用堆栈入栈顺序

2021-11-11 22:34:43  阅读:213  来源: 互联网

标签:入栈 int sp 函数调用 stp func 堆栈 ARM


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()时的堆栈变化:

 

标签:入栈,int,sp,函数调用,stp,func,堆栈,ARM
来源: https://www.cnblogs.com/aspirs/p/15542296.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有