C'è qualche documentazione o c'è una parte del codice sorgente di Cecil che posso consultare per avere una visione completa delle quali Operand
tipi Cecil utilizzerà per una data Code
valore? Ad esempio: posso spigolare da MethodBodyRocks
che Ldloc
prende un Operand
di tipo VariableDefinition
, ma non sono stato in grado di rintracciare questo verso il basso per alcuni degli altri codici di istruzioni.cecil: tipi Instruction.Operand corrispondenti al valore Instruction.OpCode.Code
risposta
È possibile esaminare la definizione di ciascun codice operativo nel file OpCodes.cs.
E.g. per Ldloc si vedrebbe OperandType.InlineVar
Per aggiungere alla risposta di poupou, OpCodes.cs mostra quali OperandType
viene assegnato per ciascun codice di istruzione. Usando questo OperandType
puoi consultare CodeReader.ReadOperand per vedere come questi OperandType
s sono usati per determinare quale tipo di oggetto concreto è costruito. Si noti inoltre che CodeReader.ReadCode
utilizza CodeReader.ResolveBranches
per trasformare alcuni operandi dagli offset di istruzione negli oggetti Instruction
prima di tornare.
Ho creato questo tavolo che era molto più conveniente poi scavare attraverso la fonte ogni volta (qualsiasi cosa che non rientrano in questa tabella dovrebbe avere un 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
- 1. Tipi di va_list corrispondenti tra i compilatori
- 2. Tipi di motivi strutturali corrispondenti in Scala
- 3. Aggiungi un try-catch con Mono Cecil
- 4. Record corrispondenti in base al Nome persona
- 5. Tipi allineati e argomenti di passaggio in base al valore
- 6. Tipi non corrispondenti, previsto() trovato Risultato durante l'utilizzo di lookup_host
- 7. Come ottenere il valore di attributo per un assieme in Cecil
- 8. "Tipi primitivi" rispetto a "tipi di valore predefiniti"
- 9. Tipi di valore e riferimento
- 10. Tipi variabili Nullable - .valore membro
- 11. il valore predefinito di "valore" nei tipi primitivi
- 12. Intervista: il people corrispondenti
- 13. Confronti diretti di tipi di valore C#
- 14. Inizializzazione del valore e tipi Non POD
- 15. Perché le proprietà dei tipi di dati nativi non vengono visualizzate nei prototipi corrispondenti?
- 16. campi corrispondenti internamente MongoDB
- 17. Controllo valore predefinito con tipi generici
- 18. Come confrontare i tipi di valore "Qualsiasi"
- 19. Unboxing generico di tipi di valore boxed
- 20. Tipi di impressioni rispetto al vecchio sottotipo vecchio
- 21. numpy.isnan (valore) non uguale al valore == numpy.nan?
- 22. geom_bar dal valore minimo al valore massimo
- 23. OpenCV corrispondenti immagini
- 24. Regex corrispondenti emoticon
- 25. Uso Streams con tipi di primitive di dati e corrispondenti involucri
- 26. funzione template con i corrispondenti parametri per sottoinsieme di tipi tuple
- 27. a.style.display: Valore assegnato al primitivo sarà perso
- 28. Algoritmo per nomi corrispondenti 'rumoroso'
- 29. Contorni corrispondenti - individuazione spostamento contorni
- 30. tabelle Unire in base al valore massimo
grande tavolo, grazie! – Alexus