frida: Error: a(): argument types do not match any of: overload('int', 'int', 'long', 'java.lang.String', 'java.lang.Object')

frida: Error: a(): argument types do not match any of: overload('int', 'int', 'long', 'java.lang.String', 'java.lang.Object')

我正在尝试调用具有此签名的方法 (int, int, long, String, Object) 问题是最后一个参数需要是一个字符串数组 当我挂钩它并打印它的最后一个参数时,将显示如下内容:

[Ljava.lang.String@abcd1234;

而且如果我通过它,该函数就可以正常工作 但是当我将它更改为我的自定义 String array

如下所示:

const arrayList = Java.use("java.util.ArrayList")
const myArray = arrayList.$new()

myArray.add("test")
myArray.add("test-1")

const stringArr = myArray.toArray()

this.a(arguments[0], arguments[1], arguments[2], arguments[3], stringArr)

会抛出错误:

Error: a(): argument types do not match any of:
        .overload('int', 'int', 'long', 'java.lang.String', 'java.lang.Object')
    at X (frida/node_modules/frida-java-bridge/lib/class-factory.js:563)
    at value (frida/node_modules/frida-java-bridge/lib/class-factory.js:967)
    at e (frida/node_modules/frida-java-bridge/lib/class-factory.js:547)
    at <anonymous> (/script1.js:94)
    at <anonymous> (frida/node_modules/frida-java-bridge/lib/vm.js:12)
    at perform (frida/node_modules/frida-java-bridge/index.js:193)
    at ms_bd_c_h_a (/script1.js:99)
    at apply (native)
    at <anonymous> (frida/runtime/message-dispatcher.js:13)
    at c (frida/runtime/message-dispatcher.js:23)

我该怎么办?

在您的代码中,您让 Frida 根据参数决定调用哪个重载方法。正如您所注意到的,这可能会变得复杂(如果您想传递 null 或其他不明确的参数,甚至会变得更复杂)。

所以我的建议是先定义你要调用的方法,然后调用它:

const cls = Java.use(<name of the class of a>)
const methodA = cls.overload('int', 'int', 'long', 'java.lang.String', '[java.lang.String')
methodA.call(this, arguments[0], arguments[1], arguments[2], arguments[3], stringArr)