美文网首页大数据人工智能圣经故事
心声0228 arm64函数参数超过8个崩溃

心声0228 arm64函数参数超过8个崩溃

作者: 水晓朴 | 来源:发表于2024-01-17 08:37 被阅读0次

程序调试出现arm64,函数参数超过8个问题程序崩溃。

总结下64汇编知识:

1.函数调用约定是什么约定?

ARM64使用的是ATPCS(ARM-Thumb Procedure Call Standard/ARM-Thumb过程调用标准)的函数调用约定。

2.函数需要用到到的指令有那些?

B:无条件跳转,一般是函数内部的if、switch条件判断的跳转

Bl:带函数返回值的跳转,一般是用于调用其他的函数。RET:子程序返回指令,返回地址默认保存在X30寄存器(LR链接寄存器)

LR:保存子程序结束后需要执行的下一条指令

PC:表示当前执行的指令的地址。

3.函数的参数怎么存储传递?

3.1. 通常情况下函数的参数存放在X0-X7(32位的为W0-W7)这8个寄存器,如果函数参数超过8个,那么就需要用到栈存储的方式来存储参数。

3.2. 函数参数如果少于8个参数的那么依次从左往右传参,如果多于8个的参数那么依次从右往左进行入栈的。

3.3 函数中8个参数和9个参数的具体情况(不过在开发过程中参数超过8个的情况是比较少的,因此在逆向过程中这种超过8个参数的情况也会比较少的)

3.3.1函数中有八个参数的,直接用寄存器W0-W7表示.

解决方法:

1.优化程序逻辑,减少参数到8个以下,提高程序兼容性,减少出错。

2.修改程序中的内嵌汇编代码,兼容更多的CPU指令。

相关文章

  • 函数的本质

    函数的参数和返回值 ARM64下,函数的参数是存放在X0到X7(W0到W7)这8个寄存器里面的.如果超过8个参数,...

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

    函数的参数和返回值: ARM64下,函数的参数是存放在X0到X7(W0到W7)这8个寄存器里面的.如果超过8个参数...

  • 逆向学习笔记5——汇编还原高级代码

    函数补充 函数的参数和返回值ARM64下,函数的参数是存放在X0到X7(W0到W7)这8个寄存器里面的.如果超过8...

  • 汇编五、函数

    函数参数 ARM64下,函数的参数是放到x0到x7(wo-w7)这八个寄存器中 如果寄存器的个数超过八个,就会把超...

  • ARM汇编初识

    iOS架构及设备 ARM64寄存器 x0-x7: 用于传递函数参数, 超出的参数将入栈. 假如在函数funcA中调...

  • 值传递?址传递,慎用形参,崩溃修复记录

    查询崩溃问题流程 拿到崩溃日志 查看崩溃线程、崩溃原因 查看崩溃函数堆栈 确定崩溃调用参数 根据控制台日志来具体分...

  • 测试参数为dispatch_semaphore_create负的

    测试代码段如下, 运行结果:崩溃如图 原因见苹果文档对于参数的描述: 在参数为负时候,此函数会返回为nil,c函数...

  • Java Builder模式

    当构造函数只有一两个参数的时候,一切都很顺利,但超过三个参数以后还使用构造函数来初始化就有些弊端,尤其是参数类型相...

  • 1108 chapter 16 purrr

    迭代方式两种:命令式编程+函数式编程永远不要复制粘贴超过2次 for循环 组成 输出使用vector()函数,参数...

  • 第三章-神经网络-激活函数

    激活函数 (1)阶跃函数 当输入超过0时,输出1,否则输出0 但是,这个函数的缺陷在于函数的输入参数只能是一个数值...

网友评论

    本文标题:心声0228 arm64函数参数超过8个崩溃

    本文链接:https://www.haomeiwen.com/subject/guelodtx.html