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

android,逆向,arm,汇编,arm64,部分,知识 · 浏览次数 : 68

小编点评

## 64位寄存器参数设置规则 | 寄存器名称 | 类型 | 范围 | 可修改参数 | |---|---|---|---| | X0-X30 | 32位 PC寄存器 | X0 - X7/W0-W7 | 否 | | W0-W30 | 32位 W0-W30 | | 否 | **注意:** * 64位寄存器参数设置参数放在 X0-X7/W0-W7结果放在 X0函数返回 RET 相当于 bl lrArm64 没有LR寄存器, lr用X30 栈底用X29ARM64 取消了ldm/stm push/pop 取而代之 STP/LDPSTUR 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]乘法指令MADDMADD W8, W8, W10, WZR 相当于 W8 = W8*W10+WZR浮点数寄存器浮点寄存器

正文

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作为返回值

与【Android 逆向】【ARM汇编】 arm64部分知识相似的内容:

【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

【Android 逆向】【ARM汇编】 函数的栈帧

1. 函数的调用约定 ARM32 参数1-4 放入r0-r3 剩下的入栈,函数返回值放入r0 ARM64 参数1-8 放入X0-X7 剩下的入栈,函数返回值放入X0 (浮点数是放入 Dn 或 Sn) 2. ARM 指令的 堆栈平衡 var_4 = -4 ; IDA 生成的变量信息,方便阅读用 STM

【Android 逆向】【ARM汇编】 事前更新和事后更新

1. 事前更新,事后更新,不更新 不更新 ldr R4, [R1, R2, lsl #1] 相当于 R4 = *(R1 + R2 << 2^1) 之后 R1、R2的值时没有变化的 事前更新(! 的含义)(++i 的感觉) ldr R0, [R1, #4]! 加了感叹号 执行完这一句后 R1的值也是随

【Android 逆向】【ARM汇编】 堆栈

arm 四种栈 1 空栈 栈指针指向空位,每次存入时可以直接存入然后栈指针移动一格;而取出时需要先移动一格才能取出 2 满栈 栈指针指向栈中最后一格数据。每次存入时需要先移动栈指针一格再存入。取出时可以直接取出,然后再移动栈指针 3 增栈 栈指针移动时向地址增加的方向移动的栈 4 减栈 栈指针移动时

【Android 逆向】【ARM汇编】 全局资源重定位

资源重定位解释: 字符串反汇编代码解释: .rodata:00001E20 __exidx_end DCB "a + b = %d" ; DATA_XREF: main+28^o .rodata 所在段名 00001E20 偏移地址 __exidx_end IDA 给的一个字符串名称 DCB IDA

【Android逆向】frida 破解 jwxdxnx02.apk

apk 路径: https://pan.baidu.com/s/1cUInoi 密码:07p9 这题比较简单,主要是用于练习frida 1. 安装apk到手机 需要输入账号密码 2. 使用jdax 查看apk package hfdcxy.com.myapplication; import andr

[Android逆向]Exposed 破解 jwxdxnx02.apk

使用exposed 遇到了一些坑,这里记录一下 源码: package com.example.exposedlesson01; import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.X

[Android 逆向]frida 破解 切水果大战原版.apk

1. 手机安装该apk,运行,点击右上角礼物 提示 支付失败,请稍后重试 2. apk拖入到jadx中,待加载完毕后,搜素失败,找到疑似目标类MymmPay的关键方法payResultFalse 4. adb logcat 或者androidstudio 查看该进程的日志,发现以下日志 com.mf

[Android 逆向]Xposed 破解 切水果大战原版.apk

代码 public class Main implements IXposedHookLoadPackage { boolean flag = false; @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam

【Android逆向】frida 破解 滚动的天空

1. apk 安装到手机中 2. 玩十次之后,会提示 充值 3. adb shell dumpsys window | grep mCurrentFocus 查看一些当前activity是哪一个 是 AppActivity 4. 阅读代码,感觉是unity3d做的游戏 5. apk拖入到jadx中,