Skip to content

Instantly share code, notes, and snippets.

@Pr0methean
Created March 24, 2020 19:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Pr0methean/24099fa6c04621820b80430eeb50acc0 to your computer and use it in GitHub Desktop.
Save Pr0methean/24099fa6c04621820b80430eeb50acc0 to your computer and use it in GitHub Desktop.
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Method;
import org.objenesis.Objenesis;
import org.objenesis.ObjenesisStd;
import sun.misc.Unsafe;
public class Main {
private static final Objenesis OBJENESIS = new ObjenesisStd();
public static void main(String[] args) throws ReflectiveOperationException {
Class<?> unsafeClass = Class.forName("jdk.internal.misc.Unsafe");
Object unsafe = OBJENESIS.newInstance(unsafeClass);
Unsafe sunMiscUnsafe = OBJENESIS.newInstance(sun.misc.Unsafe.class);
long overrideOffset = sunMiscUnsafe.objectFieldOffset(AccessibleObject.class.getDeclaredField("override"));
sunMiscUnsafe.putBoolean(
unsafeClass,
overrideOffset,
true);
Method unalignedAccess = null;
for (Method method : unsafeClass.getDeclaredMethods()) {
if ("unalignedAccess".equals(method.getName())
&& method.getParameterCount() == 0) {
unalignedAccess = method;
sunMiscUnsafe.putBoolean(
method,
overrideOffset,
true);
}
}
//Method unalignedAccess = unsafeClass.getDeclaredMethod("unalignedAccess");
sunMiscUnsafe.putBoolean(
unalignedAccess,
overrideOffset,
true);
System.out.println(unalignedAccess.invoke(unsafe));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment