upload something

This commit is contained in:
2025-11-23 02:03:41 +08:00
parent 3ea1d5b360
commit 934e511f25
709 changed files with 52244 additions and 0 deletions

View File

@@ -0,0 +1,15 @@
plugins {
java
id("firmament.common")
id("com.gradleup.shadow")
}
dependencies {
implementation(libs.asm)
}
tasks.withType<Jar> {
val agentMain = "moe.nea.firmament.testagent.AgentMain"
manifest.attributes(
"Agent-Class" to agentMain,
"Premain-Class" to agentMain,
)
}

View File

@@ -0,0 +1,21 @@
package moe.nea.firmament.testagent;
import java.lang.instrument.Instrumentation;
public class AgentMain {
public static void premain(
String agentArgs, Instrumentation inst) {
System.out.println("Pre-Main Firmament Test Agent");
AgentMain.inject(inst);
}
public static void agentmain(
String agentArgs, Instrumentation inst) {
System.out.println("Injected Firmament Test Agent");
AgentMain.inject(inst);
}
private static void inject(Instrumentation inst) {
inst.addTransformer(new ProtectedToPublicClassTransformer(inst)); }
}

View File

@@ -0,0 +1,31 @@
package moe.nea.firmament.testagent;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
public class ProtectedToPublicClassRewriter extends ClassVisitor {
public ProtectedToPublicClassRewriter(ClassWriter writer) {
super(Opcodes.ASM9, writer);
}
int makePublic(int flags) {
if ((flags & Opcodes.ACC_PROTECTED) != 0)
return (flags & ~Opcodes.ACC_PROTECTED) | Opcodes.ACC_PUBLIC;
if ((flags & (Opcodes.ACC_PUBLIC | Opcodes.ACC_PROTECTED | Opcodes.ACC_PRIVATE)) == 0)
return flags | Opcodes.ACC_PUBLIC;
return flags;
}
@Override
public FieldVisitor visitField(int access, String name, String descriptor, String signature, Object value) {
return super.visitField(makePublic(access), name, descriptor, signature, value);
}
@Override
public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) {
return super.visitMethod(makePublic(access), name, descriptor, signature, exceptions);
}
}

View File

@@ -0,0 +1,30 @@
package moe.nea.firmament.testagent;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
import java.lang.instrument.Instrumentation;
import java.security.ProtectionDomain;
public class ProtectedToPublicClassTransformer implements ClassFileTransformer {
public ProtectedToPublicClassTransformer(Instrumentation inst) {
}
@Override
public byte[] transform(ClassLoader loader,
String className,
Class<?> classBeingRedefined,
ProtectionDomain protectionDomain,
byte[] classfileBuffer)
throws IllegalClassFormatException {
if (!className.startsWith("net/minecraft/")) return classfileBuffer;
if (classfileBuffer == null) return null;
var reader = new ClassReader(classfileBuffer);
var writer = new ClassWriter(0);
var transformer = new ProtectedToPublicClassRewriter(writer);
reader.accept(transformer, 0);
return writer.toByteArray();
}
}