0

我有一个问题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});

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

另外,我创建了一个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 argument value', 'stack': 'Error: invalid argument value\n at frida/node_modules/frida-java/lib/env.js:515\ n 在 frida/node_modules/frida-java/lib/class-factory.js:2592\n 在 toJniObjectArray (frida/node_modules/frida-java/lib/class-factory.js:2640)\n 在 java.js:4489 \n 在 frida/node_modules/frida-java/lib/class-factory.js:743\n 在 [anon] (script1.js:28)\n 在 input:1', 'fileName': 'frida/node_modules/ frida-java/lib/env.js','lineNumber':515,'columnNumber':1}

4

2 回答 2

0

使用反射的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 可以使用 wrap this。


我对 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);
于 2019-04-15T11:17:02.063 回答
0

如果你想要一个'int':

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

希望你能工作

int number 似乎不能被识别为'java.lang.Object',但是一个方法(参数有一个'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 - 使用 'int' ; sendParam - 使用“整数”

于 2019-04-30T07:21:12.003 回答