【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作为返回值
本文作者:明月照江江
本文链接:https://www.cnblogs.com/gradyblog/p/17212192.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步