arm64入栈出栈_arm汇编进入C函数分析,C函数压栈,出栈,传参,返回值

本文通过分析ARM64汇编代码,讲解了从汇编进入C函数的流程,包括堆栈设置、寄存器作用、压栈出栈过程。文中提到R0-R4寄存器用于传递参数,R15和LR寄存器在函数调用中的作用。通过反汇编查看C函数的压栈和出栈操作,以及参数传递方式,揭示了堆栈8字节对齐的约定和返回值的处理机制。
摘要由CSDN通过智能技术生成

环境及代码介绍

环境和源码

由于有时候要透彻的理解C里面的一些细节问题,所有有必要看看汇编,首先这一切的开始就是从汇编代码进入C的main函数过程。这里不使用编译器自动生成的这部分汇编代码,因为编译器自动生成的代码会涉及环境变量的传递,参数的传递等等一系列问题。以ARM汇编来进行分析。使用一个启动汇编文件和一个main.c的文件,在ARM 2440板子上调试这段程序,使用JLinkExe借助jlink来调试:

init.s:

1 .text2 .global _start3 _start:

4 ldr sp,=4096  @设置堆栈指针以便调用C函数

5 bl main6 loop:

7 b loop

main.c:

1 void main(void)2 {3 }

为什么main函数没有使用 int main(int argc,char **argv) 这种形式?因为我这里是使用的自己写的启动汇编文件,由它来完成从汇编到C代码的进入。

寄存器介绍

ARM在任何一种模式下,都可以访问16个通用寄存器(R0-R15)和1-2个状态寄存器(CPSR,SPSR),只是有些寄存器是每种模式下都共用的(R0-R7),另外一些是同名但是使用的是不同硬件单元(其他,每种模式下有所不同)。这里的寄存器有些有特定用途:

R15--PC:程序计数器,指向要取指的那条指令

R14--LR:链接寄存器,保存发生跳转时,下一条指令的地址,方便使用BL跳回

R13--SP:堆栈指针

R12--IP:暂存SP值

R11--FP: 保存堆栈frame的地址

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值