我正在研究一个具有几种具有相同名称和参数的方法的Android程序。
我需要调用特定的方法重载。这样的Java代码
package a;
public class d
{
public int a() {
return 10;
}
public long a() {
return 20;
}
public long b() {
long ret = a();
return ret + 1;
}
}
我需要替换b()的实现并调用(int)a()而不是(long)a()。请帮助我修复我的frida js代码。
Java.perform(function () {
Var Class_A_D = java.Use("a.d");
Class_A_D.b.implementation = function(){
var ret = this.(a); // need to call int implementation
return ret;
}
}
d类中的代码违反了由方法名称和每种参数类型定义的方法签名原则。
因为方法类型不是签名的一部分,Java读取这些方法的方式相同:public int a(){...}公共长a(){...}
两个签名都是“ a()”
您应该将这些方法重命名为具有不同的名称(或具有不同类型的输入参数)
此处有更多信息:https://docs.oracle.com/javase/tutorial/java/javaOO/methods.html