2011-08-27 32 views
7

Herhangi bir belge var mı yoksa verilen Operand türünde bir çekirdeğin kullanacağı kapsamlı bir görünüm elde etmek için kullanabileceğim çekil kaynak kodunun bir parçası var mı? Code değeri? Örneğin: Ldloc'un numaralı Operand türünü VariableDefinition türünden aldığım MethodBodyRocks'dan alabilirim, ancak diğer komut kodlarının bazıları için bunu izleyemedim.cecil: Instruction.OpCode.Code değerine karşılık gelen türev türleri

cevap

5

Her OpCode'un tanımına OpCodes.cs dosyasında bakabilirsiniz.

E.g. Ldloc için size OperandType.InlineVar

17

, poupou cevabı her talimat Kodu için atanır OperandTypeOpCodes.cs gösterileri eklemek için görecekti. Bu OperandType'u kullanarak, bu OperandType s'nin hangi beton nesne türünün oluşturulduğunu belirlemek için nasıl kullanıldığını görmek için CodeReader.ReadOperand'a başvurabilirsiniz. Ayrıca, CodeReader.ReadCode, bazı işlenenlerini döndürme işleminden önce Instruction nesneye dönüştürmek için öğesinin CodeReader.ResolveBranches'u kullandığını unutmayın.

Ben çok (şey bir InlineNone OperandType olmalıdır Bu tabloda yer almayan) kaynak üzerinden her zaman kazma daha uygun daha sonra bu tabloyu oluşturdu:

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 
+1

Büyük tablo, teşekkür ederim! – Alexus

İlgili konular