大数据人工智能圣经故事

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

2024-01-17  本文已影响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指令。

上一篇下一篇

猜你喜欢

热点阅读