Java 类org.objectweb.asm.commons.RemappingClassAdapter 实例源码
项目:atlas
文件:ClazzReplacer.java
@Override
protected void handleClazz(JarFile jarFile, JarOutputStream jos, JarEntry ze, String pathName) {
// logger.log(pathName);
if (reMapping.containsKey(pathName.substring(0, pathName.length() - 6))) {
logger.info("[ClazzReplacer] remove class " + pathName + " form " + jarFile);
return;
}
try {
InputStream in = jarFile.getInputStream(ze);
ClassReader cr = new ClassReader(in);
ClassWriter cw = new ClassWriter(0);
RemappingClassAdapter remappingClassAdapter = new RemappingClassAdapter(cw, new SimpleRemapper(reMapping));
cr.accept(remappingClassAdapter, ClassReader.EXPAND_FRAMES);
InputStream inputStream = new ByteArrayInputStream(cw.toByteArray());
copyStreamToJar(inputStream, jos, pathName, ze.getTime());
} catch (Throwable e) {
System.err.println("[ClazzReplacer] rewrite error > " + pathName);
justCopy(jarFile, jos, ze, pathName);
}
}
项目:ARCHIVE-wildfly-swarm
文件:ApplicationFactory2.java
static byte[] create(String name, String path) throws IOException {
ClassReader reader = new ClassReader(DefaultApplication.class.getClassLoader().getResourceAsStream(DefaultApplication.class.getName().replace('.', '/') + ".class"));
String slashName = name.replace('.', '/');
ClassWriter writer = new ClassWriter(0);
Remapper remapper = new Remapper() {
@Override
public String map(String typeName) {
if (typeName.equals("org/wildfly/swarm/jaxrs/internal/DefaultApplication")) {
return slashName;
}
return super.map(typeName);
}
};
RemappingClassAdapter adapter = new RemappingClassAdapter(writer, remapper);
reader.accept(adapter, 0);
AnnotationVisitor ann = writer.visitAnnotation("Ljavax/ws/rs/ApplicationPath;", true);
ann.visit("value", path);
ann.visitEnd();
writer.visitEnd();
return writer.toByteArray();
}
项目:ARCHIVE-wildfly-swarm
文件:FaviconExceptionMapperFactory.java
static byte[] create() throws IOException {
ClassReader reader = new ClassReader(FaviconExceptionMapper.class.getClassLoader().getResourceAsStream(FaviconExceptionMapper.class.getName().replace('.', '/') + ".class"));
ClassWriter writer = new ClassWriter(0);
Remapper remapper = new Remapper() {
@Override
public String map(String typeName) {
if (typeName.equals("org/wildfly/swarm/jaxrs/internal/FaviconExceptionMapper")) {
return "org/wildfly/swarm/generated/FaviconExceptionMapper";
}
return super.map(typeName);
}
};
RemappingClassAdapter adapter = new RemappingClassAdapter(writer, remapper);
reader.accept(adapter, 0);
writer.visitAnnotation("Ljavax/ws/rs/ext/Provider;", true).visitEnd();
writer.visitEnd();
return writer.toByteArray();
}
项目:bytecode-viewer
文件:Refactorer.java
public void run() {
if (getHooks() == null)
return;
RefactorMapper mapper = new RefactorMapper(getHooks());
Map<String, ClassNode> refactored = new HashMap<>();
for (ClassNode cn : BytecodeViewer.getLoadedClasses()) {
String oldName = cn.name;
ClassReader cr = new ClassReader(getClassNodeBytes(cn));
ClassWriter cw = new ClassWriter(cr, 0);
RemappingClassAdapter rca = new RemappingClassAdapter(cw, mapper);
cr.accept(rca, ClassReader.EXPAND_FRAMES);
cr = new ClassReader(cw.toByteArray());
cn = new ClassNode();
cr.accept(cn, 0);
refactored.put(oldName, cn);
}
/*for (Map.Entry<String, ClassNode> factor : refactored.entrySet()) {
BytecodeViewer.relocate(factor.getKey(), factor.getValue());
}*/
mapper.printMap();
}
项目:libbluray
文件:BDJClassFileTransformer.java
public byte[] rename(byte[] b, Map mappings)
throws ClassFormatError
{
logger.info("Trying to rename class (" + b.length + " bytes)");
try {
SimpleRemapper m = new SimpleRemapper(mappings);
ClassReader cr = new ClassReader(b);
ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_FRAMES/* | ClassWriter.COMPUTE_MAXS*/);
ClassVisitor cv = new RemappingClassAdapter(cw, m);
cr.accept(cv, ClassReader.SKIP_DEBUG);
return cw.toByteArray();
} catch (Exception e) {
logger.error("Failed renaming class: " + e);
}
return null;
}
项目:CustomWorldGen
文件:DeobfuscationTransformer.java
@Override
public byte[] transform(String name, String transformedName, byte[] bytes)
{
if (bytes == null)
{
return null;
}
ClassReader classReader = new ClassReader(bytes);
ClassWriter classWriter = new ClassWriter(WRITER_FLAGS);
RemappingClassAdapter remapAdapter = new FMLRemappingAdapter(classWriter);
classReader.accept(remapAdapter, READER_FLAGS);
return classWriter.toByteArray();
}
项目:TRHS_Club_Mod_2016
文件:DeobfuscationTransformer.java
@Override
public byte[] transform(String name, String transformedName, byte[] bytes)
{
if (bytes == null)
{
return null;
}
ClassReader classReader = new ClassReader(bytes);
ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS);
RemappingClassAdapter remapAdapter = new FMLRemappingAdapter(classWriter);
classReader.accept(remapAdapter, ClassReader.EXPAND_FRAMES);
return classWriter.toByteArray();
}
项目:java-hot-update
文件:HotUpdateClassLoader.java
private Class<?> loadClassFromFile(final String className)
throws IOException {
String relativePath = classNameToRelativePath(className);
File file = classesRootDirPath.resolve(relativePath).toFile();
byte[] bytes = FileUtils.readFileToByteArray(file);
final String newClassName = className + System.currentTimeMillis();
final String newClassInternalName = newClassName.replaceAll("\\.", "/");
final String classInternalName = className.replaceAll("\\.", "/");
ClassReader classReader = new ClassReader(bytes);
ClassWriter classWriter = new ClassWriter(classReader,
ClassWriter.COMPUTE_MAXS);
RemappingClassAdapter remappingClassAdapter = new RemappingClassAdapter(
classWriter, new Remapper() {
@Override
public String map(String type) {
if (classInternalName.equals(type)) {
return newClassInternalName;
} else {
return type;
}
}
});
classReader.accept(remappingClassAdapter, Opcodes.ASM5 | ClassReader.EXPAND_FRAMES);
byte[] newBytes = classWriter.toByteArray();
Class<?> klass = defineClass(newClassName, newBytes, 0, newBytes.length);
classNameToClass.put(className, klass);
return klass;
}
项目:CauldronGit
文件:DeobfuscationTransformer.java
@Override
public byte[] transform(String name, String transformedName, byte[] bytes)
{
if (bytes == null)
{
return null;
}
ClassReader classReader = new ClassReader(bytes);
ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS);
RemappingClassAdapter remapAdapter = new FMLRemappingAdapter(classWriter);
classReader.accept(remapAdapter, ClassReader.EXPAND_FRAMES);
return classWriter.toByteArray();
}
项目:ignite
文件:HadoopHelperImpl.java
/** {@inheritDoc} */
@Override public byte[] loadReplace(InputStream in, final String originalName, final String replaceName) {
ClassReader rdr;
try {
rdr = new ClassReader(in);
}
catch (IOException e) {
throw new RuntimeException(e);
}
ClassWriter w = new ClassWriter(Opcodes.ASM4);
rdr.accept(new RemappingClassAdapter(w, new Remapper() {
/** */
String replaceType = replaceName.replace('.', '/');
/** */
String nameType = originalName.replace('.', '/');
@Override public String map(String type) {
if (type.equals(replaceType))
return nameType;
return type;
}
}), ClassReader.EXPAND_FRAMES);
return w.toByteArray();
}
项目:jarjar
文件:GenericsTest.java
@Test
public void testTransform() throws Exception {
ClassRename rule = new ClassRename("java.lang.String", "com.tonicsystems.String");
RemappingClassAdapter t = new RemappingClassAdapter(null, new PackageRemapper(rule));
ClassReader reader = new ClassReader(getClass().getResourceAsStream("/Generics.class"));
reader.accept(t, 0);
}
项目:Lucee
文件:JarUtil.java
private static void _getExternalImports(Set<String> imports, InputStream src,String[] ignores) throws IOException{
final ClassReader reader = new ClassReader(src);
final Remapper remapper = new Collector(imports,ignores);
final ClassVisitor inner = new EmptyVisitor();
final RemappingClassAdapter visitor =
new RemappingClassAdapter(inner, remapper);
reader.accept(visitor, 0);
}
项目:ehcache3
文件:SerializerTestUtilities.java
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
for (Entry<String, String> mapping : remappings.entrySet()) {
if (name.equals(mapping.getValue())) {
String path = mapping.getKey().replace('.', '/').concat(".class");
try {
try (InputStream resource = getResourceAsStream(path)) {
ClassReader reader = new ClassReader(resource);
ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS);
ClassVisitor visitor = new RemappingClassAdapter(writer, new Remapper() {
@Override
public String map(String from) {
String to = remappings.get(from.replace('/', '.'));
if (to == null) {
return from;
} else {
return to.replace('.', '/');
}
}
});
reader.accept(visitor, ClassReader.EXPAND_FRAMES);
byte[] classBytes = writer.toByteArray();
return defineClass(name, classBytes, 0, classBytes.length);
}
} catch (IOException e) {
throw new ClassNotFoundException("IOException while loading", e);
}
}
}
return super.findClass(name);
}
项目:Cauldron
文件:DeobfuscationTransformer.java
@Override
public byte[] transform(String name, String transformedName, byte[] bytes)
{
if (bytes == null)
{
return null;
}
ClassReader classReader = new ClassReader(bytes);
ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS);
RemappingClassAdapter remapAdapter = new FMLRemappingAdapter(classWriter);
classReader.accept(remapAdapter, ClassReader.EXPAND_FRAMES);
return classWriter.toByteArray();
}
项目:Cauldron
文件:DeobfuscationTransformer.java
@Override
public byte[] transform(String name, String transformedName, byte[] bytes)
{
if (bytes == null)
{
return null;
}
ClassReader classReader = new ClassReader(bytes);
ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS);
RemappingClassAdapter remapAdapter = new FMLRemappingAdapter(classWriter);
classReader.accept(remapAdapter, ClassReader.EXPAND_FRAMES);
return classWriter.toByteArray();
}
项目:Cauldron
文件:DeobfuscationTransformer.java
@Override
public byte[] transform(String name, String transformedName, byte[] bytes)
{
if (bytes == null)
{
return null;
}
ClassReader classReader = new ClassReader(bytes);
ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS);
RemappingClassAdapter remapAdapter = new FMLRemappingAdapter(classWriter);
classReader.accept(remapAdapter, ClassReader.EXPAND_FRAMES);
return classWriter.toByteArray();
}
项目:ForgeBuilder
文件:AsmFixer.java
private static final ClassNode get(final String name) throws IOException {
final InputStream is = ClassVisitor.class.getClassLoader().getResource(name).openStream();
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final byte[] byteChunk = new byte[4096];
int n;
while ((n = is.read(byteChunk)) >= 0)
baos.write(byteChunk, 0, n);
is.close();
final ClassReader cr = new ClassReader(baos.toByteArray());
final ClassNode cn = new ClassNode();
final RemappingClassAdapter rca = new RemappingClassAdapter(cn, rmp);
cr.accept(rca, ClassReader.EXPAND_FRAMES);
return cn;
}
项目:RuneCraftery
文件:DeobfuscationTransformer.java
@Override
public byte[] transform(String name, String transformedName, byte[] bytes)
{
if (bytes == null)
{
return null;
}
ClassReader classReader = new ClassReader(bytes);
ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS);
RemappingClassAdapter remapAdapter = new FMLRemappingAdapter(classWriter);
classReader.accept(remapAdapter, ClassReader.EXPAND_FRAMES);
return classWriter.toByteArray();
}
项目:RuneCraftery
文件:DeobfuscationTransformer.java
@Override
public byte[] transform(String name, String transformedName, byte[] bytes)
{
if (bytes == null)
{
return null;
}
ClassReader classReader = new ClassReader(bytes);
ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS);
RemappingClassAdapter remapAdapter = new FMLRemappingAdapter(classWriter);
classReader.accept(remapAdapter, ClassReader.EXPAND_FRAMES);
return classWriter.toByteArray();
}
项目:BetterNutritionMod
文件:DeobfuscationTransformer.java
@Override
public byte[] transform(String name, String transformedName, byte[] bytes)
{
if (bytes == null)
{
return null;
}
ClassReader classReader = new ClassReader(bytes);
ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS);
RemappingClassAdapter remapAdapter = new FMLRemappingAdapter(classWriter);
classReader.accept(remapAdapter, ClassReader.EXPAND_FRAMES);
return classWriter.toByteArray();
}
项目:Parabot
文件:ClassPath.java
/**
* Loads class from input stream
*
* @param in
*
* @throws IOException
*/
protected void loadClass(InputStream in) throws IOException {
ClassReader cr = new ClassReader(in);
ClassNode cn = new ClassNode();
RemappingClassAdapter rca = new RemappingClassAdapter(cn, classRemapper);
RedirectClassAdapter redir = new RedirectClassAdapter(rca);
cr.accept(redir, ClassReader.EXPAND_FRAMES);
classNames.add(cn.name.replace('/', '.'));
classes.put(cn.name, cn);
}
项目:QDrill
文件:MergeAdapter.java
public static MergedClassResult getMergedClass(final ClassSet set, final byte[] precompiledClass,
ClassNode generatedClass, final boolean scalarReplace) {
if (verifyBytecode) {
if (!AsmUtil.isClassBytesOk(logger, "precompiledClass", precompiledClass)) {
throw new IllegalStateException("Problem found in precompiledClass");
}
if ((generatedClass != null) && !AsmUtil.isClassOk(logger, "generatedClass", generatedClass)) {
throw new IllegalStateException("Problem found in generatedClass");
}
}
/*
* Setup adapters for merging, remapping class names and class writing. This is done in
* reverse order of how they will be evaluated.
*/
final RemapClasses re = new RemapClasses(set);
try {
if (scalarReplace && generatedClass != null) {
if (logger.isDebugEnabled()) {
AsmUtil.logClass(logger, "generated " + set.generated.dot, generatedClass);
}
final ClassNode generatedMerged = new ClassNode();
ClassVisitor mergeGenerator = generatedMerged;
if (verifyBytecode) {
mergeGenerator = new DrillCheckClassAdapter(CompilationConfig.ASM_API_VERSION,
new CheckClassVisitorFsm(CompilationConfig.ASM_API_VERSION, generatedMerged), true);
}
/*
* Even though we're effectively transforming-creating a new class in mergeGenerator,
* there's no way to pass in ClassWriter.COMPUTE_MAXS, which would save us from having
* to figure out stack size increases on our own. That gets handled by the
* InstructionModifier (from inside ValueHolderReplacement > ScalarReplacementNode).
*/
generatedClass.accept(new ValueHolderReplacementVisitor(mergeGenerator, verifyBytecode));
if (verifyBytecode) {
if (!AsmUtil.isClassOk(logger, "generatedMerged", generatedMerged)) {
throw new IllegalStateException("Problem found with generatedMerged");
}
}
generatedClass = generatedMerged;
}
final ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
ClassVisitor writerVisitor = writer;
if (verifyBytecode) {
writerVisitor = new DrillCheckClassAdapter(CompilationConfig.ASM_API_VERSION,
new CheckClassVisitorFsm(CompilationConfig.ASM_API_VERSION, writerVisitor), true);
}
ClassVisitor remappingAdapter = new RemappingClassAdapter(writerVisitor, re);
if (verifyBytecode) {
remappingAdapter = new DrillCheckClassAdapter(CompilationConfig.ASM_API_VERSION,
new CheckClassVisitorFsm(CompilationConfig.ASM_API_VERSION, remappingAdapter), true);
}
ClassVisitor visitor = remappingAdapter;
if (generatedClass != null) {
visitor = new MergeAdapter(set, remappingAdapter, generatedClass);
}
ClassReader tReader = new ClassReader(precompiledClass);
tReader.accept(visitor, ClassReader.SKIP_FRAMES);
byte[] outputClass = writer.toByteArray();
if (logger.isDebugEnabled()) {
AsmUtil.logClassFromBytes(logger, "merged " + set.generated.dot, outputClass);
}
// enable when you want all the generated merged class files to also be written to disk.
// Files.write(outputClass, new File(String.format("/src/scratch/drill-generated-classes/%s-output.class", set.generated.dot)));
return new MergedClassResult(outputClass, re.getInnerClasses());
} catch (Error | RuntimeException e) {
logger.error("Failure while merging classes.", e);
AsmUtil.logClass(logger, "generatedClass", generatedClass);
throw e;
}
}
项目:4Space-5
文件:ObfuscationRun.java
public void remap(ClassNode cnode, ClassVisitor cv)
{
cstMappper.transform(cnode);
cnode.accept(new RemappingClassAdapter(cv, obfMapper));
}
项目:CodeChickenCore
文件:ObfuscationRun.java
public void remap(ClassNode cnode, ClassVisitor cv) {
cstMappper.transform(cnode);
cnode.accept(new RemappingClassAdapter(cv, obfMapper));
}
项目:mc-watercolor
文件:Visitors.java
public ClassMangler(ClassVisitor visitor, String origName, String mangledName, String target)
{
super(Opcodes.ASM4, new RemappingClassAdapter(visitor, new SimpleRemapper(origName, mangledName)));
this.mangledName = mangledName;
this.target = target;
}
项目:jarjar
文件:RemappingClassTransformer.java
@Override
public ClassVisitor transform(ClassVisitor v) {
return new RemappingClassAdapter(v, remapper);
}
项目:Interglot
文件:App.java
public static void process(File inFile, String outFile, final String version, final Logger logger) {
Remapper remapper = new Remapper() {
@Override
public String map(String typeName) {
for (String pre : repackaged) {
if (typeName.startsWith(pre)) {
Matcher matcher = versioned.matcher(typeName);
if (matcher.matches()) {
// Jar was compiled for older version, lets update the name
pre = typeName.substring(0, matcher.start());
}
String post = typeName.substring(pre.length(), typeName.length());
String newName = pre + version + "/" + post;
// logger.info(typeName + " -> " + newName);
return newName;
}
}
return typeName;
}
};
try {
logger.info("Reading " + inFile);
JarInputStream inJar = new JarInputStream(new FileInputStream(inFile));
JarOutputStream out = new JarOutputStream(new FileOutputStream(outFile));
int processed = 0;
JarEntry entry;
while ((entry = inJar.getNextJarEntry()) != null) {
if (entry.isDirectory()) {
continue;
}
String name = entry.getName();
byte[] entryBytes = stream2Byte(inJar);
// logger.info("Read " + name + " from input jar.");
if (name.endsWith(".class")) {
ClassReader cr = new ClassReader(entryBytes);
ClassWriter cw = new ClassWriter(cr, 0);
cr.accept(new RemappingClassAdapter(cw, remapper), ClassReader.EXPAND_FRAMES);
entryBytes = cw.toByteArray();
// Unfortunately for us, Heroes implements an additonal version checker, so even though our bytecode is valid, it still won't run
String heroes = "com/herocraftonline/heroes/util/VersionChecker.class";
if (name.equals(heroes)) {
InputStream in = App.class.getClassLoader().getResourceAsStream(name);
entryBytes = stream2Byte(in);
in.close();
}
processed++;
// logger.info("Processed class file " + name);
}
out.putNextEntry(new JarEntry(name));
out.write(entryBytes);
// logger.info("Added " + name + " to output jar.");
}
inJar.close();
out.close();
logger.info("Done! Processed " + processed + " files. The new jar is at " + outFile + ". Remember this jar is may not work correctly at all and could cause harm to your server. Test first!\n");
} catch (Exception ex) {
logger.severe("Exception, check console for details!");
ex.printStackTrace();
}
}
项目:CCObfuscator
文件:ObfuscationRun.java
public void remap(ClassNode cnode, ClassVisitor cv)
{
cstMappper.transform(cnode);
cnode.accept(new RemappingClassAdapter(cv, obfMapper));
}