arm64汇编篇-05函数的本质及实例分析

本文介绍了ARM64架构下函数的参数存储在X0-X7寄存器,超过8个则入栈;返回值存储在X0寄存器。函数的局部变量存放在栈中,并通过汇编代码示例解释了堆栈操作,包括参数交换。此外,还展示了如何在iOS环境中创建和理解汇编代码,为逆向分析和理解函数本质提供基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数的参数和返回值:

ARM64下,函数的参数是存放在X0到X7(W0到W7)这8个寄存器里面的.如果超过8个参数,就会入栈.

函数的返回值是放在X0 寄存器里面的.

这些是系统规定的,也正是这些规则我们才能逆向去解析别人的代码。

函数的局部变量:

函数的局部变量放在栈里面。这个大家都知道,下面我们建个项目来研究下函数执行的汇编代码。

堆栈操作例子:

使用32个字节空间作为这段程序的栈空间,然后利用栈将x0和x1的值进行交换.

以下代码[ ]中括号表示取指向的地址因为栈是从高地址向低地址开辟的所以用sub减地址内存,但是读写是从低地址向高地址的所以sp会指向到需要读写地址的前面,而通用寄存器为31个不变0-28 fp lr,所以寄存器会不断和内存交互存取值。

str stp是将数据从寄存器中取出存到内存,ldr ldp 是将数据从内存读取出来存到寄存器,所以一下操作是在sp开辟的栈内高地址先将寄存器x0 x1中的数据先存到对应的内存中,然后将对应寄存器中的数据存到寄存器中不同的是换了寄存器的存储顺序,从而实现寄存器中的数据交换。理解这个实例后下面的理解就方便多了。

sub    sp, sp, #0x20 ;拉伸栈空间32个字节

stp    x0, x1, [sp, #0x10] ;sp往上加16个字节,存放x0 和 x1

ldp    x1, x0, [sp, #0x10] ;将sp偏移16个字节的值取出来,放入x1 和 x0

add sp,sp,#0x20; 栈平衡即释放开辟的空间

实例:

注:执行代码都需要连真机执行5s以上型号。模拟器是x86的系统架构跟arm64有区别。

1.创建Demo->comman

ARM架构与x86架构在CPU设计上的本质区别主要体现在指令集架构、微架构设计、目标应用领域以及它们如何处理并行性和能耗效率等方面。ARM采用精简指令集(RISC),专注于低功耗、高效率的嵌入式应用,而x86架构采用复杂指令集(CISC),主要用于性能密集型的桌面和服务器市场。 参考资源链接:[ARM处理器:从嵌入式到服务器的转型](https://wenku.csdn.net/doc/647a8e2a543f8444881cb962?spm=1055.2569.3001.10343) 为了在工程教育中教授这两种架构的不同,推荐结合《ARM汇编语言编程与架构》一书。首先,教材中的第一章可以用来讲解ARM的历史和微控制器的发展,帮助学生理解ARM架构的起源及其在微控制器市场的演变。第二章关于ARM架构和汇编语言编程的内容,能够让学生深入理解ARM处理器的基础结构,并掌握编写ARM汇编程序的方法。 通过教材中关于算术和逻辑指令的章节(第三章),学生能够学习到ARM处理器执行的算术和逻辑操作,以及相关的编程技巧。在此基础上,可以引入x86架构的相关知识,比较两种架构在指令集设计上的不同。例如,通过附录A中ARM Cortex-M3的指令描述与x86指令集的对比,学生可以直观地感受到两种架构在指令编码和执行模式上的区别。 同时,工程教育中可以通过第七章关于ARM流水线和CPU进化的讨论,引导学生了解现代CPU设计中的流水线技术,并通过比较来探究x86架构如何在高性能计算中实现复杂指令集的流水线化。此外,教材中提供的附录B至F为学生提供了丰富的实例和工具,用于深入分析和编写ARM汇编代码,这可以作为教授x86汇编语言时的参考,来探究两种架构在内存管理、函数调用、数据表示等方面的不同处理方式。 通过这种跨架构的教学方法,学生不仅能掌握ARM架构的核心概念,还能对x86架构有更深刻的理解,进而在工程实践中灵活运用,设计出适应不同应用场景的系统。 参考资源链接:[ARM处理器:从嵌入式到服务器的转型](https://wenku.csdn.net/doc/647a8e2a543f8444881cb962?spm=1055.2569.3001.10343)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值