【Android 逆向】【ARM汇编】 arm64部分知识

arm64寄存器更多
X0-X30 SP CPSR PC 64位
W0-W30            32位
PC寄存器的值禁止修改
参数放在 X0-X7/W0-W7
结果放在 X0
函数返回 RET 相当于 bl lr
Arm64 没有LR寄存器, lr用X30 栈底用X29
ARM64 取消了ldm/stm push/pop 取而代之 STP/LDP
STUR STR 区别
STUR X8, [X29, #var_F8] 
STUR 代表向负数偏移 var_F8 就是个负数,X29是栈底位置 向栈顶偏移

STR X8, [SP, #0x220+var_110]
STR 代表向正数偏移, #0x220 是栈顶到栈底的距离 #0x220+var_110 是是个正数,SP是栈顶,代表栈顶向栈底偏移

WZR/XZR 0寄存器
STUR WZR , [X29, #100] 相当于 mov X0, 0  STR X0, [SP, #100]
乘法指令MADD

MADD W8, W8, W10, WZR 相当于 W8 = W8*W10+WZR

浮点数寄存器

浮点寄存器 64位: D0 - D31 32位: S0 - S31

如果函数的返回值是double或者float, 那么有可能是用D0或者S0作为返回值
posted @ 2023-03-13 17:19  明月照江江  阅读(285)  评论(0编辑  收藏  举报