Czy istnieje jakakolwiek dokumentacja lub czy istnieje część kodu źródłowego cecil, którą mogę skonsultować, aby uzyskać pełny widok, którego będą używać typy cecil dla danego parametru? Code
wartość? Na przykład: mogę zbierać od MethodBodyRocks
, że Ldloc
pobiera Operand
typu VariableDefinition
, ale nie byłem w stanie wyśledzić tego dla niektórych innych kodów instrukcji.cecil: Instruction.Operand typy odpowiadające wartości Instruction.OpCode.Code
Odpowiedz
Możesz przyjrzeć się definicji każdego kodu OpCode w pliku OpCodes.cs.
E.g. dla Ldloc byś zobaczyć OperandType.InlineVar
Aby dodać odpowiedź poupou, w OpCodes.cs pokazy który OperandType
zostanie przypisane do każdego kodu instrukcji. Korzystając z tego OperandType
, można zapoznać się z CodeReader.ReadOperand, aby zobaczyć, w jaki sposób te OperandType
s są wykorzystywane do określenia, który konkretny typ obiektu jest skonstruowany. Zauważ też, że CodeReader.ReadCode
używa CodeReader.ResolveBranches
do transformacji niektórych operandów z przesunięć instrukcji na obiekty Instruction
przed powrotem.
Stworzyłem ten stół, który był o wiele bardziej wygodne następnie kopanie przez źródło każdym razem (nic nie ujęte w powyższej tabeli powinny mieć 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. unboxing Wartości Typy od obiektów
- 2. Formularze nie odpowiadające zdarzeniom KeyDown
- 3. C# inline warunkowe typy wartości nullabel
- 4. Jak uzyskać typy i wartości tablicy const?
- 5. Wyrównane typy i przekazywanie argumentów według wartości
- 6. Jak działają typy wartości w .NET?
- 7. Dlaczego nie wszystkie typy wartości są zerowe?
- 8. Możliwe typy $ _POST i $ _GET wartości
- 9. Jak napisać wyrażenie rekurencyjne odpowiadające zagnieżdżonym nawiasom?
- 10. Jak uzyskać źródło odpowiadające węzłowi Python AST?
- 11. Jak mogę użyć Cecil, aby znaleźć typ przekazany do ogólnej metody?
- 12. Mono-Cecil: Jak mogę uzyskać ModuleDefinition dla mscorlib?
- 13. Zapytanie o hibernację - Jak wybrać rodziców, którzy mają WSZYSTKIE dzieci odpowiadające wartości?
- 14. Typy klas i typy zależne
- 15. Niekompletne typy jak parametry funkcji i zwracane wartości
- 16. Jak odkodować tablicę wartości, których typy zależą od znacznika?
- 17. przy użyciu Scala 2.10.1 Typy wartości w Javie
- 18. Czy NSDictionary może zawierać różne typy obiektów jako wartości?
- 19. Dlaczego typy Rusta `Atomic *` używają niemodulujących funkcji do mutowania wartości?
- 20. wartości nieklasyczne zawsze mają typy niekwalifikujące się do cv
- 21. Również typy wartości w obiekcie przechowywanym w stercie?
- 22. Czy typy wyliczeniowe .NET są właściwie zmiennymi typami wartości?
- 23. Jak mogę porównać typy wartości nabyte z "GetValue" Reflection?
- 24. Oblicz różne wartości za pomocą elasticsearch
- 25. Typy RequestCode dla startActivityforResult
- 26. Unboxing typy nullable - obejście?
- 27. Wyrażenie regularne odpowiadające czasowi w formacie wojskowym (24 godziny)
- 28. Jak wyszukiwać w Firebase klucze odpowiadające prefiksowi ciągów znaków
- 29. Wyrażenie regularne odpowiadające ciągom znaków alfanumerycznym, spacje i znaki interpunkcyjne
- 30. Jak uzyskać prawdopodobieństwa odpowiadające klasie z losowego lasu Spark ML
świetny stolik, dziękuję! – Alexus