public void InitToken(ThreadContext context, CodeBody body, object _p) { switch (code) { case CodeEx.Leave: case CodeEx.Leave_S: case CodeEx.Br: case CodeEx.Br_S: case CodeEx.Brtrue: case CodeEx.Brtrue_S: case CodeEx.Brfalse: case CodeEx.Brfalse_S: //比较流程控制 case CodeEx.Beq: case CodeEx.Beq_S: case CodeEx.Bne_Un: case CodeEx.Bne_Un_S: case CodeEx.Bge: case CodeEx.Bge_S: case CodeEx.Bge_Un: case CodeEx.Bge_Un_S: case CodeEx.Bgt: case CodeEx.Bgt_S: case CodeEx.Bgt_Un: case CodeEx.Bgt_Un_S: case CodeEx.Ble: case CodeEx.Ble_S: case CodeEx.Ble_Un: case CodeEx.Ble_Un_S: case CodeEx.Blt: case CodeEx.Blt_S: case CodeEx.Blt_Un: case CodeEx.Blt_Un_S: //this.tokenAddr = ((Mono.Cecil.Cil.Instruction)_p).Offset; this.tokenAddr_Index = body.addr[((Mono.Cecil.Cil.Instruction)_p).Offset]; break; case CodeEx.Isinst: case CodeEx.Constrained: case CodeEx.Box: case CodeEx.Initobj: case CodeEx.Castclass: case CodeEx.Newarr: this.tokenType = context.GetType(_p); //this.tokenUnknown = _p; break; case CodeEx.Ldfld: case CodeEx.Ldflda: case CodeEx.Ldsfld: case CodeEx.Ldsflda: case CodeEx.Stfld: case CodeEx.Stsfld: this.tokenField = context.GetField(_p); //this.tokenUnknown = _p; break; case CodeEx.Call: case CodeEx.Callvirt: case CodeEx.Newobj: case CodeEx.Ldftn: case CodeEx.Ldvirtftn: this.tokenMethod = context.GetMethod(_p); break; case CodeEx.Ldc_I4: this.tokenI32 = (int)_p; break; case CodeEx.Ldc_I4_S: this.tokenI32 = (int)Convert.ToDecimal(_p); break; case CodeEx.Ldc_I4_M1: this.tokenI32 = -1; break; case CodeEx.Ldc_I4_0: this.tokenI32 = 0; break; case CodeEx.Ldc_I4_1: this.tokenI32 = 1; break; case CodeEx.Ldc_I4_2: this.tokenI32 = 2; break; case CodeEx.Ldc_I4_3: this.tokenI32 = 3; break; case CodeEx.Ldc_I4_4: this.tokenI32 = 4; break; case CodeEx.Ldc_I4_5: this.tokenI32 = 5; break; case CodeEx.Ldc_I4_6: this.tokenI32 = 6; break; case CodeEx.Ldc_I4_7: this.tokenI32 = 7; break; case CodeEx.Ldc_I4_8: this.tokenI32 = 8; break; case CodeEx.Ldc_I8: this.tokenI64 = (Int64)_p; break; case CodeEx.Ldc_R4: this.tokenR32 = (float)_p; break; case CodeEx.Ldc_R8: this.tokenR64 = (double)_p; break; case CodeEx.Ldstr: this.tokenStr = _p as string; break; case CodeEx.Ldloca: case CodeEx.Ldloca_S: case CodeEx.Ldloc_S: case CodeEx.Stloc_S: this.tokenI32 = ((VariableDefinition)_p).Index; //this.tokenUnknown = _p; break; case CodeEx.Ldloc: case CodeEx.Stloc: this.tokenI32 = (int)_p; break; case CodeEx.Ldloc_0: this.tokenI32 = 0; break; case CodeEx.Ldloc_1: this.tokenI32 = 1; break; case CodeEx.Ldloc_2: this.tokenI32 = 2; break; case CodeEx.Ldloc_3: this.tokenI32 = 3; break; case CodeEx.Ldarga: case CodeEx.Ldarga_S: case CodeEx.Starg: case CodeEx.Starg_S: this.tokenI32 = (_p as Mono.Cecil.ParameterDefinition).Index; break; case CodeEx.Switch: { Mono.Cecil.Cil.Instruction[] e = _p as Mono.Cecil.Cil.Instruction[]; tokenAddr_Switch = new int[e.Length]; for (int i = 0; i < e.Length; i++) { tokenAddr_Switch[i] = body.addr[(e[i].Offset)]; } } break; case CodeEx.Ldarg: this.tokenI32 = (int)_p; break; case CodeEx.Ldarg_S: this.tokenI32 = (_p as Mono.Cecil.ParameterReference).Index; break; case CodeEx.Volatile: case CodeEx. Ldind_I1: case CodeEx. Ldind_U1: case CodeEx. Ldind_I2: case CodeEx. Ldind_U2: case CodeEx. Ldind_I4: case CodeEx. Ldind_U4: case CodeEx. Ldind_I8: case CodeEx. Ldind_I: case CodeEx. Ldind_R4: case CodeEx. Ldind_R8: case CodeEx. Ldind_Ref: break; default: this.tokenUnknown = _p; break; } }
public void InitToken(ThreadContext context, CodeBody body, object _p) { switch (code) { case CodeEx.Leave: case CodeEx.Leave_S: case CodeEx.Br: case CodeEx.Br_S: case CodeEx.Brtrue: case CodeEx.Brtrue_S: case CodeEx.Brfalse: case CodeEx.Brfalse_S: //比较流程控制 case CodeEx.Beq: case CodeEx.Beq_S: case CodeEx.Bne_Un: case CodeEx.Bne_Un_S: case CodeEx.Bge: case CodeEx.Bge_S: case CodeEx.Bge_Un: case CodeEx.Bge_Un_S: case CodeEx.Bgt: case CodeEx.Bgt_S: case CodeEx.Bgt_Un: case CodeEx.Bgt_Un_S: case CodeEx.Ble: case CodeEx.Ble_S: case CodeEx.Ble_Un: case CodeEx.Ble_Un_S: case CodeEx.Blt: case CodeEx.Blt_S: case CodeEx.Blt_Un: case CodeEx.Blt_Un_S: //this.tokenAddr = ((Mono.Cecil.Cil.Instruction)_p).Offset; this.tokenAddr_Index = body.addr[((Mono.Cecil.Cil.Instruction)_p).Offset]; break; case CodeEx.Isinst: case CodeEx.Constrained: case CodeEx.Box: case CodeEx.Initobj: case CodeEx.Castclass: this.tokenType = context.GetType(_p); //this.tokenUnknown = _p; break; case CodeEx.Ldfld: case CodeEx.Ldflda: case CodeEx.Ldsfld: case CodeEx.Ldsflda: case CodeEx.Stfld: case CodeEx.Stsfld: this.tokenField = context.GetField(_p); //this.tokenUnknown = _p; break; case CodeEx.Call: case CodeEx.Callvirt: case CodeEx.Newobj: case CodeEx.Ldftn: case CodeEx.Ldvirtftn: this.tokenMethod = context.GetMethod(_p); break; case CodeEx.Ldc_I4: this.tokenI32 = (int)_p; break; case CodeEx.Ldc_I4_S: this.tokenI32 = (int)Convert.ToDecimal(_p); break; case CodeEx.Ldc_I4_M1: this.tokenI32 = -1; break; case CodeEx.Ldc_I4_0: this.tokenI32 = 0; break; case CodeEx.Ldc_I4_1: this.tokenI32 = 1; break; case CodeEx.Ldc_I4_2: this.tokenI32 = 2; break; case CodeEx.Ldc_I4_3: this.tokenI32 = 3; break; case CodeEx.Ldc_I4_4: this.tokenI32 = 4; break; case CodeEx.Ldc_I4_5: this.tokenI32 = 5; break; case CodeEx.Ldc_I4_6: this.tokenI32 = 6; break; case CodeEx.Ldc_I4_7: this.tokenI32 = 7; break; case CodeEx.Ldc_I4_8: this.tokenI32 = 8; break; case CodeEx.Ldc_I8: this.tokenI64 = (Int64)_p; break; case CodeEx.Ldc_R4: this.tokenR32 = (float)_p; break; case CodeEx.Ldc_R8: this.tokenR64 = (double)_p; break; case CodeEx.Ldstr: this.tokenStr = _p as string; break; case CodeEx.Ldloca: case CodeEx.Ldloca_S: case CodeEx.Ldloc_S: case CodeEx.Stloc_S: this.tokenI32 = ((VariableDefinition)_p).Index; //this.tokenUnknown = _p; break; case CodeEx.Ldloc: case CodeEx.Stloc: this.tokenI32 = (int)_p; break; case CodeEx.Ldloc_0: this.tokenI32 = 0; break; case CodeEx.Ldloc_1: this.tokenI32 = 1; break; case CodeEx.Ldloc_2: this.tokenI32 = 2; break; case CodeEx.Ldloc_3: this.tokenI32 = 3; break; case CodeEx.Ldarga: case CodeEx.Ldarga_S: case CodeEx.Starg: case CodeEx.Starg_S: this.tokenI32 = (_p as Mono.Cecil.ParameterDefinition).Index; break; case CodeEx.Switch: { Mono.Cecil.Cil.Instruction[] e = _p as Mono.Cecil.Cil.Instruction[]; tokenAddr_Switch = new int[e.Length]; for (int i = 0; i < e.Length; i++) { tokenAddr_Switch[i] = body.addr[(e[i].Offset)]; } } break; case CodeEx.Ldarg: this.tokenI32 = (int)_p; break; case CodeEx.Ldarg_S: this.tokenI32 = (_p as Mono.Cecil.ParameterReference).Index; break; case CodeEx.Volatile: break; default: this.tokenUnknown = _p; break; } }
public void InitToken(ThreadContext context, CodeBody body, object _p) { CodeEx codeEx = this.code; switch (codeEx) { case CodeEx.Ldloc_0: this.tokenI32 = 0; return; case CodeEx.Ldloc_1: this.tokenI32 = 1; return; case CodeEx.Ldloc_2: this.tokenI32 = 2; return; case CodeEx.Ldloc_3: this.tokenI32 = 3; return; case CodeEx.Stloc_0: case CodeEx.Stloc_1: case CodeEx.Stloc_2: case CodeEx.Stloc_3: case CodeEx.Ldnull: case CodeEx.Dup: case CodeEx.Pop: case CodeEx.Jmp: case CodeEx.Calli: case CodeEx.Ret: case CodeEx.Stind_Ref: case CodeEx.Stind_I1: case CodeEx.Stind_I2: case CodeEx.Stind_I4: case CodeEx.Stind_I8: case CodeEx.Stind_R4: case CodeEx.Stind_R8: case CodeEx.Add: case CodeEx.Sub: case CodeEx.Mul: case CodeEx.Div: case CodeEx.Div_Un: case CodeEx.Rem: case CodeEx.Rem_Un: case CodeEx.And: case CodeEx.Or: case CodeEx.Xor: case CodeEx.Shl: case CodeEx.Shr: case CodeEx.Shr_Un: case CodeEx.Neg: case CodeEx.Not: case CodeEx.Conv_I1: case CodeEx.Conv_I2: case CodeEx.Conv_I4: case CodeEx.Conv_I8: case CodeEx.Conv_R4: case CodeEx.Conv_R8: case CodeEx.Conv_U4: case CodeEx.Conv_U8: case CodeEx.Cpobj: case CodeEx.Ldobj: case CodeEx.Conv_R_Un: case CodeEx.Unbox: case CodeEx.Throw: case CodeEx.Stobj: case CodeEx.Conv_Ovf_I1_Un: case CodeEx.Conv_Ovf_I2_Un: case CodeEx.Conv_Ovf_I4_Un: case CodeEx.Conv_Ovf_I8_Un: case CodeEx.Conv_Ovf_U1_Un: case CodeEx.Conv_Ovf_U2_Un: case CodeEx.Conv_Ovf_U4_Un: case CodeEx.Conv_Ovf_U8_Un: case CodeEx.Conv_Ovf_I_Un: case CodeEx.Conv_Ovf_U_Un: goto IL_4AA; case CodeEx.Ldarg_S: this.tokenI32 = (_p as ParameterReference).Index; return; case CodeEx.Ldarga_S: case CodeEx.Starg_S: goto IL_42C; case CodeEx.Ldloc_S: case CodeEx.Ldloca_S: case CodeEx.Stloc_S: goto IL_3D5; case CodeEx.Ldc_I4_M1: this.tokenI32 = -1; return; case CodeEx.Ldc_I4_0: this.tokenI32 = 0; return; case CodeEx.Ldc_I4_1: this.tokenI32 = 1; return; case CodeEx.Ldc_I4_2: this.tokenI32 = 2; return; case CodeEx.Ldc_I4_3: this.tokenI32 = 3; return; case CodeEx.Ldc_I4_4: this.tokenI32 = 4; return; case CodeEx.Ldc_I4_5: this.tokenI32 = 5; return; case CodeEx.Ldc_I4_6: this.tokenI32 = 6; return; case CodeEx.Ldc_I4_7: this.tokenI32 = 7; return; case CodeEx.Ldc_I4_8: this.tokenI32 = 8; return; case CodeEx.Ldc_I4_S: this.tokenI32 = (int)Convert.ToDecimal(_p); return; case CodeEx.Ldc_I4: this.tokenI32 = (int)_p; return; case CodeEx.Ldc_I8: this.tokenI64 = (long)_p; return; case CodeEx.Ldc_R4: this.tokenR32 = (float)_p; return; case CodeEx.Ldc_R8: this.tokenR64 = (double)_p; return; case CodeEx.Call: case CodeEx.Callvirt: case CodeEx.Newobj: goto IL_2E0; case CodeEx.Br_S: case CodeEx.Brfalse_S: case CodeEx.Brtrue_S: case CodeEx.Beq_S: case CodeEx.Bge_S: case CodeEx.Bgt_S: case CodeEx.Ble_S: case CodeEx.Blt_S: case CodeEx.Bne_Un_S: case CodeEx.Bge_Un_S: case CodeEx.Bgt_Un_S: case CodeEx.Ble_Un_S: case CodeEx.Blt_Un_S: case CodeEx.Br: case CodeEx.Brfalse: case CodeEx.Brtrue: case CodeEx.Beq: case CodeEx.Bge: case CodeEx.Bgt: case CodeEx.Ble: case CodeEx.Blt: case CodeEx.Bne_Un: case CodeEx.Bge_Un: case CodeEx.Bgt_Un: case CodeEx.Ble_Un: case CodeEx.Blt_Un: break; case CodeEx.Switch: { Instruction[] array = _p as Instruction[]; this.tokenAddr_Switch = new int[array.Length]; for (int i = 0; i < array.Length; i++) { this.tokenAddr_Switch[i] = body.addr[array[i].Offset]; } return; } case CodeEx.Ldind_I1: case CodeEx.Ldind_U1: case CodeEx.Ldind_I2: case CodeEx.Ldind_U2: case CodeEx.Ldind_I4: case CodeEx.Ldind_U4: case CodeEx.Ldind_I8: case CodeEx.Ldind_I: case CodeEx.Ldind_R4: case CodeEx.Ldind_R8: case CodeEx.Ldind_Ref: goto IL_4A8; case CodeEx.Ldstr: this.tokenStr = (_p as string); return; case CodeEx.Castclass: case CodeEx.Isinst: case CodeEx.Box: case CodeEx.Newarr: goto IL_2BC; case CodeEx.Ldfld: case CodeEx.Ldflda: case CodeEx.Stfld: case CodeEx.Ldsfld: case CodeEx.Ldsflda: case CodeEx.Stsfld: this.tokenField = context.GetField(_p); return; default: switch (codeEx) { case CodeEx.Leave: case CodeEx.Leave_S: break; case CodeEx.Stind_I: case CodeEx.Conv_U: case CodeEx.Arglist: case CodeEx.Ceq: case CodeEx.Cgt: case CodeEx.Cgt_Un: case CodeEx.Clt: case CodeEx.Clt_Un: case CodeEx.Localloc: case CodeEx.Endfilter: case CodeEx.Unaligned: case CodeEx.Tail: goto IL_4AA; case CodeEx.Ldftn: case CodeEx.Ldvirtftn: goto IL_2E0; case CodeEx.Ldarg: this.tokenI32 = (int)_p; return; case CodeEx.Ldarga: case CodeEx.Starg: goto IL_42C; case CodeEx.Ldloc: case CodeEx.Stloc: this.tokenI32 = (int)_p; return; case CodeEx.Ldloca: goto IL_3D5; case CodeEx.Volatile: goto IL_4A8; case CodeEx.Initobj: case CodeEx.Constrained: goto IL_2BC; default: goto IL_4AA; } break; } this.tokenAddr_Index = body.addr[((Instruction)_p).Offset]; return; IL_2BC: this.tokenType = context.GetType(_p); return; IL_2E0: this.tokenMethod = context.GetMethod(_p); return; IL_3D5: this.tokenI32 = ((VariableDefinition)_p).Index; return; IL_42C: this.tokenI32 = (_p as ParameterDefinition).Index; IL_4A8: return; IL_4AA: this.tokenUnknown = _p; }