Frida中的Java和js变量类型的映射关系
此处Java中的变量类型,转换成Frida中的类型的写法是:
Frida(的js)中的变量类型,其底层来自于Dex
所以其实就是:
- Frida的类型 == Dex中的类型 的语法
即:
- Java变量类型 -》 Frida=Dex变量类型
- 非数组列表
- 简单类型
- 完整写法
intintbytebyteshortshortlonglongfloatfloatdoubledoublecharchar
- -》 缩写 ShortyDescriptor
- 缩写 说明
Vvoid;仅对返回类型有效ZbooleanBbyteSshortCcharIintJlongFfloatDdouble
- 完整写法
- 特殊的对象Object == 带父类,带路径的Java的类:前缀L + 点. 变成 斜杠/ + 后缀分号;
- 语法:
Lfully/qualified/Name; - 说明:类
fully.qualified.Name - 举例
Ljava/lang/String;Ljava/lang/Object;Ljava/lang/System;Ljava/io/PrintStream;Ljava/net/InetAddress;Ljava/time/LocalDateTime;Ljava/lang/ClassLoader;
- 语法:
- 简单类型
- 列表=数组:前面再加个:左中括号
[- 语法
[descriptor
- 说明
- descriptor 的数组,可递归地用于“数组的数组”,但维数不能超过 255
- 举例
- 普通类型:字母缩写
int[]->[Ibyte[]->[Bshort[]->[Slong[]->[Jfloat[]->[Fdouble[]->[Dchar[]->[C
- 特殊类型:用(Frida=Dex中的)完整类名写法
[Ljava/lang/String;[Ljava/lang/Object;[Ldalvik/system/DexPathList$Element;
- 普通类型:字母缩写
- 语法
- 非数组列表
含义 = 使用场景举例:
(1)Java相关:函数的签名=定义
举例1:
runtime/native/dalvik_system_DexFile.cc - platform/art - Git at Google (googlesource.com)
NATIVE_METHOD(DexFile, createCookieWithArray, "([BII)Ljava/lang/Object;"),
-》
([BII)Ljava/lang/Object;([BII)- 括号内是函数参数
[BII[B=byte[]= 字节码数组列表I=intI=int
- 括号内是函数参数
Ljava/lang/Object;- 类型:
Object
- 类型:
-》所以函数的完整定义 类型 就是这样的:
Object createCookieWithArray(byte[], int, int)
举例2:
NATIVE_METHOD(DexFile, isProfileGuidedCompilerFilter, "(Ljava/lang/String;)Z"),
-》
(Ljava/lang/String;)Z(Ljava/lang/String;)Ljava/lang/String;
Z
-》
void isProfileGuidedCompilerFilter(String)
(2)Frida中
Frida中,定义Object数组的写法:
var JavaObjArr = Java.use("[Ljava.lang.Object;")
console.log("JavaObjArr=" + JavaObjArr)
输出:
JavaObjArr=<class: [Ljava.lang.Object;>
把变量转换为Object的数组:
var objArr = Java.cast(obj, JavaObjArr)
console.log("objArr=" + objArr)
输出:
objArr=[Ljava.lang.Object;@fc9e9af