Cecil: Instruction.Operand matching Instruction.OpCode.Code

Is there any documentation or is there part of the cecil source code that I can handle to get a full idea of ​​what Operand cecil types will use for a given Code value? For example: I can get from MethodBodyRocks that Ldloc accepts Operand type VariableDefinition , but I could not track this for some other command codes.

+7
source share
2 answers

You can see the definition of each OpCode in the OpCodes.cs file.

eg. for Ldloc you will see OperandType.InlineVar

+5
source

To add poupou to the answer, OpCodes.cs shows which OperandType assigned for each command code. Using OperandType , you can refer to CodeReader.ReadOperand to find out how these OperandType are used to determine what type of specific object is being built. Also note that CodeReader.ReadCode uses CodeReader.ResolveBranches to convert some operands from instruction offsets to Instruction objects before returning.

I created this table, which was much more convenient than ever digging through the source (everything that is not described in this table should have an InlineNone OperandType):

 Instruction.OpCode.Code|Instruction.OpCode.OperandType|Instruction.Operand class Ldarg_S |ShortInlineArg |ParameterDefinition Ldarga_S |ShortInlineArg |ParameterDefinition Starg_S |ShortInlineArg |ParameterDefinition Ldloc_S |ShortInlineVar |VariableDefinition Ldloca_S |ShortInlineVar |VariableDefinition Stloc_S |ShortInlineVar |VariableDefinition Ldc_I4_S |ShortInlineI |sbyte <===== NOTE: special case Ldc_I4 |InlineI |int32 Ldc_I8 |InlineI8 |int64 Ldc_R4 |ShortInlineR |single Ldc_R8 |InlineR |float (64 bit) Jmp |InlineMethod |MethodReference Call |InlineMethod |MethodReference Calli |InlineSig |CallSite Br_S |ShortInlineBrTarget |Instruction Brfalse_S |ShortInlineBrTarget |Instruction Brtrue_S |ShortInlineBrTarget |Instruction Beq_S |ShortInlineBrTarget |Instruction Bge_S |ShortInlineBrTarget |Instruction Bgt_S |ShortInlineBrTarget |Instruction Ble_S |ShortInlineBrTarget |Instruction Blt_S |ShortInlineBrTarget |Instruction Bne_Un_S |ShortInlineBrTarget |Instruction Bge_Un_S |ShortInlineBrTarget |Instruction Bgt_Un_S |ShortInlineBrTarget |Instruction Ble_Un_S |ShortInlineBrTarget |Instruction Blt_Un_S |ShortInlineBrTarget |Instruction Br |InlineBrTarget |Instruction Brfalse |InlineBrTarget |Instruction Brtrue |InlineBrTarget |Instruction Beq |InlineBrTarget |Instruction Bge |InlineBrTarget |Instruction Bgt |InlineBrTarget |Instruction Ble |InlineBrTarget |Instruction Blt |InlineBrTarget |Instruction Bne_Un |InlineBrTarget |Instruction Bge_Un |InlineBrTarget |Instruction Bgt_Un |InlineBrTarget |Instruction Ble_Un |InlineBrTarget |Instruction Blt_Un |InlineBrTarget |Instruction Switch |InlineSwitch |Instruction array Callvirt |InlineMethod |MethodReference Cpobj |InlineType |TypeReference Ldobj |InlineType |TypeReference Ldstr |InlineString |string Newobj |InlineMethod |MethodReference Castclass |InlineType |TypeReference Isinst |InlineType |TypeReference Unbox |InlineType |TypeReference Ldfld |InlineField |FieldReference Ldflda |InlineField |FieldReference Stfld |InlineField |FieldReference Ldsfld |InlineField |FieldReference Ldsflda |InlineField |FieldReference Stsfld |InlineField |FieldReference Stobj |InlineType |TypeReference Box |InlineType |TypeReference Newarr |InlineType |TypeReference Ldelema |InlineType |TypeReference Ldelem_Any |InlineType |TypeReference Stelem_Any |InlineType |TypeReference Unbox_Any |InlineType |TypeReference Refanyval |InlineType |TypeReference Mkrefany |InlineType |TypeReference Ldtoken |InlineTok |IMetadataTokenProvider Leave |InlineBrTarget |Instruction Leave_S |ShortInlineBrTarget |Instruction Ldftn |InlineMethod |MethodReference Ldvirtftn |InlineMethod |MethodReference Ldarg |InlineArg |ParameterDefinition Ldarga |InlineArg |ParameterDefinition Starg |InlineArg |ParameterDefinition Ldloc |InlineVar |VariableDefinition Ldloca |InlineVar |VariableDefinition Stloc |InlineVar |VariableDefinition Unaligned |ShortInlineI |byte Initobj |InlineType |TypeReference Constrained |InlineType |TypeReference No |ShortInlineI |byte Sizeof |InlineType |TypeReference 
+17
source

All Articles