From 2b2249e873c4adfd2dd6e8f1f2489ccd9f6aa021 Mon Sep 17 00:00:00 2001 From: gegy1000 Date: Sat, 19 May 2018 17:02:46 +0200 Subject: Initial port to ASM --- .../cuchaz/enigma/bytecode/ClassProtectifier.java | 54 +++++++++++----------- 1 file changed, 26 insertions(+), 28 deletions(-) (limited to 'src/main/java/cuchaz/enigma/bytecode/ClassProtectifier.java') diff --git a/src/main/java/cuchaz/enigma/bytecode/ClassProtectifier.java b/src/main/java/cuchaz/enigma/bytecode/ClassProtectifier.java index 6ec576e..9ed6db9 100644 --- a/src/main/java/cuchaz/enigma/bytecode/ClassProtectifier.java +++ b/src/main/java/cuchaz/enigma/bytecode/ClassProtectifier.java @@ -11,41 +11,39 @@ package cuchaz.enigma.bytecode; -import javassist.CtBehavior; -import javassist.CtClass; -import javassist.CtField; -import javassist.bytecode.AccessFlag; -import javassist.bytecode.InnerClassesAttribute; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.FieldVisitor; +import org.objectweb.asm.MethodVisitor; -public class ClassProtectifier { +public class ClassProtectifier extends ClassVisitor { - public static CtClass protectify(CtClass c) { - - // protectify all the fields - for (CtField field : c.getDeclaredFields()) { - field.setModifiers(protectify(field.getModifiers())); - } + public ClassProtectifier(int api, ClassVisitor cv) { + super(api, cv); + } - // protectify all the methods and constructors - for (CtBehavior behavior : c.getDeclaredBehaviors()) { - behavior.setModifiers(protectify(behavior.getModifiers())); - } + @Override + public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { + access = protectify(access); + return super.visitMethod(access, name, desc, signature, exceptions); + } - // protectify all the inner classes - InnerClassesAttribute attr = (InnerClassesAttribute) c.getClassFile().getAttribute(InnerClassesAttribute.tag); - if (attr != null) { - for (int i = 0; i < attr.tableLength(); i++) { - attr.setAccessFlags(i, protectify(attr.accessFlags(i))); - } - } + @Override + public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) { + access = protectify(access); + return super.visitField(access, name, desc, signature, value); + } - return c; + @Override + public void visitInnerClass(String name, String outerName, String innerName, int access) { + access = protectify(access); + super.visitInnerClass(name, outerName, innerName, access); } - private static int protectify(int flags) { - if (AccessFlag.isPrivate(flags)) { - flags = AccessFlag.setProtected(flags); + private static int protectify(int access) { + AccessFlags accessFlags = new AccessFlags(access); + if (accessFlags.isPrivate()) { + accessFlags.setProtected(); } - return flags; + return accessFlags.getFlags(); } } -- cgit v1.2.3