如何通过 frida js 创建一个 Integer.TYPE(int.class) 数组



我有一个问题在java.lang.Class.getMethod.

public Method getMethod(String name, Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException 
{
    return getMethod(name, parameterTypes, true); 
}

第二个参数需要[java.lang.Object];类型,并java如下代码:

getMethod("say", new Class[]{String.class,int.class});
getMethod("say", new Class[]{Integer.TYPE,Integer.TYPE});

那么如何使用js或其他方式创建此array

此外,我创建了一个这样的obj array

var Integerclass = Java.use("java.lang.Integer");
var objectArr = Java.array('Ljava.lang.Class;[Integerclass.TYPE,Integerclass.TYPE]);

但是我得到了一个无效的参数值错误,如何解决它?

{'type': 'error', 'description': 'error: invalid parameter value', 'stack': 'error: invalid parameter value at frida/node_modules/frida-java/lib/env.js:515 at frida/node_modules/frida-java/lib/class-factory.js:2592 at toJniObjectArray (frida/node_modules/frida-java/lib/class-factory.js:

2640( at java.js:4489 at frida/node_modules/frida-java/lib/class-factory.js:743 at [anon] (script1.js:28( at input:1', 'fileName': 'frida/node_modules/frida-java/lib/env.js', 'lineNumber': 515, 'columnNumber': 1}

使用反射的 java 代码将是:

int length = 42;
int[] arr = (int[]) java.lang.reflect.Array.newInstance(int.class, length);

其中int.class对应于常数Integer.TYPE

您可以将反射用作:

klazz.getMethod("avg", int[].class, int.class);

JavaScript 可以使用包装这个。


我对 JavaScript 的猜测:

var StringClass = Java.use("java.lang.String.class");
var IntClass = Java.use("int.class");
var IntArrayClass = Java.use("int[].class");
var objectArr = Java.array([IntClass, IntArrayClass]);
var objectArr = Java.array([StringClass, IntClass]);
getMethod("say", objectArr);

如果你想要一个'int':

Integer = Java.use("java.lang.Integer")
int = Integer.class.getField("TYPE").get(null)

希望你能工作

int number似乎不能被识别为"java.lang.Object",但是一个方法(param有一个"int"(可以自动适应它。下面是一个示例:

var iActivityManager = ActivityManagerNative.class.getMethod("getDefault", null).invoke(null, null)
var method_startUserInBackground = ActivityManagerNative.class.getMethod("startUserInBackground", [int])
var isOK = method_startUserInBackground.invoke(iActivityManager, [Integer.$new(10)])
getMethod - use '

int' ; sendParam - use 'Integer'

相关内容

最新更新