Skip to content

Instantly share code, notes, and snippets.

@smx-smx
Created December 14, 2022 21:29
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 smx-smx/dc548226bcae16b57f9e6a44ca9d5f99 to your computer and use it in GitHub Desktop.
Save smx-smx/dc548226bcae16b57f9e6a44ca9d5f99 to your computer and use it in GitHub Desktop.
GetEntryAssembly override
private static unsafe void ReplaceGetEntryAssembly() {
MethodInfo methodToReplace = typeof(Assembly).GetMethod("GetEntryAssembly", BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public);
MethodInfo methodToInject = typeof(EzDotnetCompat).GetMethod("MyGetEntryAssembly", BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public);
RuntimeHelpers.PrepareMethod(methodToReplace.MethodHandle);
RuntimeHelpers.PrepareMethod(methodToInject.MethodHandle);
long* inj = (long*)methodToInject.MethodHandle.Value.ToPointer() + 1;
long* tar = (long*)methodToReplace.MethodHandle.Value.ToPointer() + 1;
byte* injInst = (byte*)*inj;
byte* tarInst = (byte*)*tar;
int* injSrc = (int*)(injInst + 1);
int* tarSrc = (int*)(tarInst + 1);
*tarSrc = (((int)injInst + 5) + *injSrc) - ((int)tarInst + 5);
}
private static Assembly MyGetEntryAssembly() {
return typeof(Program).Assembly;
}
public static void InstallHooks() {
// this is required for Log4Net to function properly
ReplaceGetEntryAssembly();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment