Skip to content

Instantly share code, notes, and snippets.

@sn-0w
Created October 5, 2021 20:09
Show Gist options
  • Select an option

  • Save sn-0w/8e760e85ba87c69dae0c8f63852d0d40 to your computer and use it in GitHub Desktop.

Select an option

Save sn-0w/8e760e85ba87c69dae0c8f63852d0d40 to your computer and use it in GitHub Desktop.
public static void smethod_0(int int_0, int int_1, int int_2)
{
int_0--;
int_1++;
int_0 = (int_0 + 1 ^ 505596512 ^ 1371342433 ^ 505596512);
int num = int_2 & 255;
int_2 ^= num;
num += 15;
RuntimeTypeHandle handle = Class105.moduleHandle_0.ResolveTypeHandle(int_0);
int_1 = (int_1 - 1 ^ num ^ 593475365 ^ num);
RuntimeMethodHandle handle2 = Class105.moduleHandle_0.ResolveMethodHandle(int_1);
int_2 = ((int_2 | num - 15) ^ 505596512);
RuntimeFieldHandle handle3 = Class105.moduleHandle_0.ResolveFieldHandle(int_2);
FieldInfo fieldFromHandle = FieldInfo.GetFieldFromHandle(handle3);
Type typeFromHandle = Type.GetTypeFromHandle(handle);
MethodInfo methodInfo = (MethodInfo)MethodBase.GetMethodFromHandle(handle2);
FieldInfo fieldInfo = fieldFromHandle;
Type type = typeFromHandle;
MethodInfo methodInfo2 = methodInfo;
Type type2 = type;
FieldInfo fieldInfo2 = fieldInfo;
if (methodInfo2.IsStatic)
{
fieldInfo2.SetValue(null, Delegate.CreateDelegate(fieldInfo2.FieldType, methodInfo2));
}
else
{
ParameterInfo[] parameters = methodInfo2.GetParameters();
int num2 = parameters.Length + 1;
Type[] array = new Type[num2];
array[0] = (methodInfo2.DeclaringType.IsValueType ? methodInfo2.DeclaringType.MakeByRefType() : typeof(object));
for (int i = 1; i < num2; i++)
{
array[i] = parameters[i - 1].ParameterType;
}
DynamicMethod dynamicMethod = new DynamicMethod(string.Empty, methodInfo2.ReturnType, array, type2, true);
ILGenerator ilgenerator = dynamicMethod.GetILGenerator();
ilgenerator.Emit(OpCodes.Ldarg_0);
ILGenerator ilgenerator2 = ilgenerator;
int num3 = num2;
ILGenerator ilgenerator3 = ilgenerator2;
for (int j = 1; j < num3; j++)
{
switch (j)
{
case 0:
ilgenerator3.Emit(OpCodes.Ldarg_0);
break;
case 1:
ilgenerator3.Emit(OpCodes.Ldarg_1);
break;
case 2:
ilgenerator3.Emit(OpCodes.Ldarg_2);
break;
case 3:
ilgenerator3.Emit(OpCodes.Ldarg_3);
break;
default:
ilgenerator3.Emit(OpCodes.Ldarg_S, j);
break;
}
}
ilgenerator.Emit(fieldInfo2.IsAssembly ? OpCodes.Callvirt : OpCodes.Call, methodInfo2);
ilgenerator.Emit(OpCodes.Ret);
Delegate value = dynamicMethod.CreateDelegate(type2);
fieldInfo2.SetValue(null, value);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment