美文网首页大数据人工智能圣经故事
心声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指令。

    相关文章

      网友评论

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

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