internal unsafe override void Emulate(EmuContext ctx) { var slot = ctx.Stack.Pop(); VMSlot value = new VMSlot(); if (slot.O is IReference) { value = ((IReference)slot.O).GetValue(ctx, IntPtr.Size == 8 ? PointerType.QWORD : PointerType.DWORD); } else { if (IntPtr.Size == 8) { ulong *ptr = (ulong *)slot.U8; value = new VMSlot { U8 = *ptr }; } else { uint *ptr = (uint *)slot.U8; value = new VMSlot { U4 = *ptr }; } } ctx.Stack.Push(value); }
internal override void EmulateVCall(EmuContext ctx) { VMSlot slot = ctx.Stack.Pop(); VMSlot slot2 = ctx.Stack.Pop(); bool flag = (slot.U4 & 2147483648u) > 0u; FieldInfo fieldInfo = (FieldInfo)ctx.Header.References[slot.U4 & 2147483647u]; bool flag2 = !fieldInfo.IsStatic && slot2.O == null; if (flag2) { // throw new NullReferenceException(); return; } if (flag) { ctx.Stack.Push(new VMSlot() { O = new FieldRef(slot2.O, fieldInfo) }); } else { bool flag4 = fieldInfo.DeclaringType.IsValueType && slot2.O is IReference; object obj; if (flag4) { obj = ((IReference)slot2.O).GetValue(ctx, PointerType.OBJECT).ToObject(fieldInfo.DeclaringType); } else { obj = slot2.ToObject(fieldInfo.DeclaringType); } ctx.Stack.Push(VMSlot.FromObject(fieldInfo.GetValue(obj), fieldInfo.FieldType)); } }
internal unsafe override void EmulateVCall(EmuContext ctx) { VMSlot slot = ctx.Stack.Pop(); VMSlot value = ctx.Stack.Pop(); bool flag = (slot.U4 & 2147483648u) > 0u; Type type = (Type)ctx.Header.References[slot.U4 & 2147483647u]; if (flag) { TypedReference typedRef; Helpers.TypedReferenceHelpers.UnboxTypedRef(value.O, (void *)(&typedRef)); TypedRef typedRef2 = new TypedRef(typedRef); value = VMSlot.FromObject(value.O, type); ctx.Stack.Push(value); } else { bool flag3 = type == typeof(object) && value.O != null; if (flag3) { type = value.O.GetType(); } value = VMSlot.FromObject(value.O, type); ctx.Stack.Push(value); } }
internal override void EmulateVCall(EmuContext ctx) { if (ctx.Stack.Pop().U4 > 0u) { //throw overflow } }
internal override void EmulateVCall(EmuContext ctx) { VMSlot slot = ctx.Stack.Pop(); VMSlot value = ctx.Stack.Pop(); bool flag = (slot.U4 & 2147483648u) > 0u; Type type = (Type)ctx.Header.References[slot.U4 & 2147483647u]; bool flag2 = Type.GetTypeCode(type) == TypeCode.String && value.O == null; if (flag2) { value.O = ctx.Header.Strings[value.U4]; } else { if (value.O == null) { value.O = null; //n***a wtf } else { if (!type.IsInstanceOfType(value.O)) { value.O = null; if (flag) { //throw exceptpion } } } } ctx.Stack.Push(value); }
internal override void EmulateVCall(EmuContext ctx) { VMSlot value = ctx.Stack.Pop(); MemberInfo memberInfo = (MemberInfo)ctx.Header.References[value.U4]; bool flag = memberInfo is Type; if (flag) { value.O = ValueTypeBox.Box(((Type)memberInfo).TypeHandle, typeof(RuntimeTypeHandle)); } else { bool flag2 = memberInfo is MethodBase; if (flag2) { value.O = ValueTypeBox.Box(((MethodBase)memberInfo).MethodHandle, typeof(RuntimeMethodHandle)); } else { bool flag3 = memberInfo is FieldInfo; if (flag3) { value.O = ValueTypeBox.Box(((FieldInfo)memberInfo).FieldHandle, typeof(RuntimeFieldHandle)); } } } ctx.Stack.Push(value); }
internal override void EmulateVCall(EmuContext ctx) { VMSlot slot = ctx.Stack.Pop(); byte u2 = ctx.Registers[(int)ctx.Constants.REG_FL].U1; bool flag = (u2 & ctx.Constants.FL_UNSIGNED) > 0; if (flag) { float r = slot.R4; bool flag2 = float.IsNaN(r) || float.IsInfinity(r); if (flag2) { //throw arithmeticexception } } else { double r2 = slot.R8; bool flag3 = double.IsNaN(r2) || double.IsInfinity(r2); if (flag3) { //throw arithmeticexception } } }
internal override void Emulate(EmuContext ctx) { var val = ctx.Stack.Pop().U1; var vcall = ctx.LookupVCall(val); vcall.EmulateVCall(ctx); }
internal override void EmulateVCall(EmuContext ctx) { VMSlot slot = ctx.Stack.Pop(); VMSlot slot2 = ctx.Stack.Pop(); Type type = (Type)ctx.Header.References[slot.U4]; bool flag = slot2.O is IReference; if (flag) { IReference reference = (IReference)slot2.O; VMSlot val = new VMSlot(); bool isValueType = type.IsValueType; if (isValueType) { object vt = null; bool flag2 = Nullable.GetUnderlyingType(type) == null; if (flag2) { vt = FormatterServices.GetUninitializedObject(type); } slot.O = Box(vt, type); } else { slot.O = null; } } }
internal override void Emulate(EmuContext ctx) { //throw new System.NotImplementedException(); byte b = ctx.ReadByte(); VMSlot value = ctx.Registers[(int)b]; ctx.Stack.Push(value); }
internal override void Emulate(EmuContext ctx) { //throw new System.NotImplementedException(); VMSlot slot = ctx.Stack.Pop(); slot.R4 = (float)slot.U8; ctx.Stack.Push(slot); }
internal override void Emulate(EmuContext ctx) { var regid = ctx.ReadByte(); var slot = ctx.Registers[regid]; ctx.Stack.Push(new VMSlot { U1 = slot.U1 }); }
internal override void EmulateVCall(EmuContext ctx) { VMSlot value = ctx.Stack.Pop(); VMSlot slot = ctx.Stack.Pop(); VMSlot slot2 = ctx.Stack.Pop(); value.U8 = ((value.U8 > slot.U8 || value.U8 < slot2.U8) ? 1UL : 0UL); ctx.Stack.Push(value); }
internal override void Emulate(EmuContext ctx) { var slot = ctx.Stack.Pop(); var slot2 = ctx.Stack.Pop(); if (slot2.U8 == 0UL) { ctx.Reader.BaseStream.Position = (long)slot.U8; } }
internal override void Emulate(EmuContext ctx) { VMSlot first = ctx.Stack.Pop(); VMSlot second = ctx.Stack.Pop(); ctx.Stack.Push(new VMSlot() { U4 = first.U4 / second.U4 }); }
internal override void EmulateVCall(EmuContext ctx) { Type type = (Type)ctx.Header.References[ctx.Stack.Pop().U4]; ctx.Stack.Push(new VMSlot() { U4 = (uint)SizeOfHelper.SizeOf(type) }); //Fixed :) }
internal override void Emulate(EmuContext ctx) { //throw new System.NotImplementedException(); VMSlot first = ctx.Stack.Pop(); VMSlot second = ctx.Stack.Pop(); ctx.Stack.Push(new VMSlot() { R8 = second.R8 + first.R8 }); }
internal override void Emulate(EmuContext ctx) { //throw new System.NotImplementedException(); VMSlot slot = ctx.Stack.Pop(); VMSlot slot2 = ctx.Stack.Pop(); ctx.Stack.Push(new VMSlot() { U4 = ~(slot.U4 | slot2.U4) }); }
internal override void Emulate(EmuContext ctx) { //throw new System.NotImplementedException(); byte b = ctx.ReadByte(); VMSlot vmslot = ctx.Registers[(int)b]; ctx.Stack.Push(new VMSlot() { U8 = vmslot.U8 }); }
internal override void Emulate(EmuContext ctx) { //throw new System.NotImplementedException(); VMSlot slot = ctx.Stack.Pop(); VMSlot slot2 = ctx.Stack.Pop(); VMSlot slotnew = new VMSlot(); ulong num2 = (ulong)(slot.U4 * slot2.U4); slotnew.U4 = (uint)num2; ctx.Stack.Push(slotnew); }
internal override void Emulate(EmuContext ctx) { //throw new System.NotImplementedException(); VMSlot value = ctx.Stack.Pop(); bool flag = (value.U4 & 2147483648u) > 0u; if (flag) { value.U8 = (18446744069414584320UL | (ulong)value.U4); } ctx.Stack.Push(value); }
internal unsafe override void Emulate(EmuContext ctx) { var slot = ctx.Stack.Pop(); var slot2 = ctx.Stack.Pop(); uint u = slot2.U4; // ushort num2 = *(UIntPtr)(slot.U8 - 2UL); // bool flag = u < (uint)num2; // if (flag) { // ctx.Reader.BaseStream.Position = ctx.Reader.BaseStream.Position + (ulong)((long)(*((UIntPtr)slot.U8 + (UIntPtr)((IntPtr)((ulong)u * 4UL))))); // } //To Fix This }
internal override void Emulate(EmuContext ctx) { //throw new System.NotImplementedException(); VMSlot value = ctx.Stack.Pop(); bool flag = (value.U1 & 128) > 0; if (flag) { value.U4 = ((uint)value.U1 | 4294967040u); } ctx.Stack.Push(value); }
internal override void Emulate(EmuContext ctx) { var slot = ctx.Stack.Pop(); var slot2 = ctx.Stack.Pop(); if (slot.O is IReference) { ((IReference)slot.O).SetValue(ctx, slot2, PointerType.OBJECT); } else { //Throw Exception? } }
internal override void EmulateVCall(EmuContext ctx) { VMSlot slot = ctx.Stack.Pop(); VMSlot slot2 = ctx.Stack.Pop(); if (slot2.O != null) { MethodInfo methodInfo = (MethodInfo)ctx.Header.References[slot.U4]; Type type = slot2.O.GetType(); List <Type> list = new List <Type>(); do { list.Add(type); type = type.BaseType; }while (type != null && type != methodInfo.DeclaringType); list.Reverse(); MethodInfo methodInfo2 = methodInfo; foreach (Type type2 in list) { foreach (MethodInfo methodInfo3 in type2.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) { bool flag2 = methodInfo3.GetBaseDefinition() == methodInfo2; if (flag2) { methodInfo2 = methodInfo3; break; } } } ctx.Stack.Push(new VMSlot() { U8 = (ulong)((long)methodInfo2.MethodHandle.GetFunctionPointer()) }); } if (slot2.U8 > 0UL) { uint u = ctx.Stack.Pop().U4; ulong u2 = slot.U8; // VMFuncSig TODO: VMFuncSig,VMTrampoline } else { MethodBase methodBase = (MethodBase)ctx.Header.References[slot.U4]; ctx.Stack.Push(new VMSlot() { U8 = (ulong)((long)methodBase.MethodHandle.GetFunctionPointer()) }); } }
internal override void Emulate(EmuContext ctx) { //throw new System.NotImplementedException(); ulong num2 = (ulong)ctx.ReadByte(); num2 |= (ulong)ctx.ReadByte() << 8; num2 |= (ulong)ctx.ReadByte() << 16; num2 |= (ulong)ctx.ReadByte() << 24; int lol = int.MinValue; ulong num3 = ((num2 & (ulong)lol) != 0UL) ? 18446744069414584320UL : 0UL; VMSlot newslot = new VMSlot(); newslot.U8 = (num3 | num2); ctx.Stack.Push(newslot); }
internal override void Emulate(EmuContext ctx) { var slot = ctx.Stack.Pop(); VMSlot value = new VMSlot(); if (slot.O is IReference) { value = ((IReference)slot.O).GetValue(ctx, PointerType.OBJECT); } else { //throw exception? } ctx.Stack.Push(value); }
internal unsafe override void Emulate(EmuContext ctx) { var slot = ctx.Stack.Pop(); var slot2 = ctx.Stack.Pop(); if (slot.O is IReference) { ((IReference)slot.O).SetValue(ctx, slot2, PointerType.DWORD); } else { uint u2 = slot2.U4; uint *ptr = (uint *)slot.U8; * ptr = u2; } }
internal unsafe override void Emulate(EmuContext ctx) { var slot = ctx.Stack.Pop(); var slot2 = ctx.Stack.Pop(); if (slot.O is IReference) { ((IReference)slot.O).SetValue(ctx, slot2, PointerType.BYTE); } else { byte u2 = slot2.U1; byte *ptr = (byte *)slot.U8; * ptr = u2; } }
internal override void EmulateVCall(EmuContext ctx) { VMSlot slot = ctx.Stack.Pop(); VMSlot value = ctx.Stack.Pop(); Type type = (Type)ctx.Header.References[slot.U4]; if (Type.GetTypeCode(type) == TypeCode.String && value.O == null) { value.O = ctx.Header.Strings[value.U4]; } else { value.O = value.ToObject(type); } ctx.Stack.Push(value); }