Seeing something weird with invokestatic methods on non static methods?
This commit is contained in:
@@ -175,6 +175,19 @@ public class ClassFile
|
||||
return null;
|
||||
}
|
||||
|
||||
public Method findMethodDeepStatic(NameAndType nat)
|
||||
{
|
||||
Method m = methods.findMethod(nat);
|
||||
if (m != null && m.isStatic())
|
||||
return m;
|
||||
|
||||
ClassFile parent = getParent();
|
||||
if (parent != null)
|
||||
return parent.findMethodDeep(nat);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public Method findMethod(NameAndType nat)
|
||||
{
|
||||
return methods.findMethod(nat);
|
||||
|
||||
@@ -51,7 +51,7 @@ public class InvokeStatic extends Instruction implements InvokeInstruction
|
||||
if (otherClass == null)
|
||||
return new ArrayList<>(); // not our class
|
||||
|
||||
info.sigterm.deob.Method other = otherClass.findMethodDeep(method.getNameAndType());
|
||||
info.sigterm.deob.Method other = otherClass.findMethodDeepStatic(method.getNameAndType());
|
||||
assert other != null;
|
||||
|
||||
List<info.sigterm.deob.Method> list = new ArrayList<>();
|
||||
@@ -180,7 +180,8 @@ public class InvokeStatic extends Instruction implements InvokeInstruction
|
||||
if (otherClass == null)
|
||||
return; // not our class
|
||||
|
||||
info.sigterm.deob.Method other = otherClass.findMethodDeep(method.getNameAndType());
|
||||
info.sigterm.deob.Method other = otherClass.findMethodDeepStatic(method.getNameAndType());
|
||||
assert other.isStatic();
|
||||
|
||||
if (other.equals(m))
|
||||
method = new Method(method.getClassEntry(), new NameAndType(name, method.getNameAndType().getDescriptor()));
|
||||
|
||||
@@ -34,7 +34,7 @@ public class UnusedParameters implements Deobfuscator
|
||||
|
||||
visited.add(cf);
|
||||
|
||||
Method method = cf.findMethodDeep(nat); // XXX this searches down
|
||||
Method method = cf.findMethod(nat);
|
||||
if (method != null && !method.isStatic())
|
||||
list.add(method);
|
||||
|
||||
@@ -55,10 +55,7 @@ public class UnusedParameters implements Deobfuscator
|
||||
private static List<Method> findDependentMethods(Method m)
|
||||
{
|
||||
ClassFile cf = m.getMethods().getClassFile();
|
||||
List<Method> methods = findDependentMethods(m.getNameAndType(), new HashSet<ClassFile>(), cf.getGroup(), cf);
|
||||
|
||||
Set s = new HashSet<>(methods); // XXX
|
||||
return new ArrayList<>(s);
|
||||
return findDependentMethods(m.getNameAndType(), new HashSet<ClassFile>(), cf.getGroup(), cf);
|
||||
}
|
||||
|
||||
private List<Integer> findUnusedParameters(Method method)
|
||||
|
||||
Reference in New Issue
Block a user