public AnalysisNet.Types.IMetadataReference ExtractToken(Cecil.MemberReference token) { AnalysisNet.Types.IMetadataReference result = AnalysisNet.Types.PlatformType.Unknown; if (token is Cecil.MethodReference methodRef) { result = ExtractMethod(methodRef); } else if (token is Cecil.TypeReference typeRef) { result = ExtractType(typeRef); } else if (token is Cecil.FieldReference fieldRef) { // not sure about it bool isStatic = fieldRef.IsDefinition ? fieldRef.Resolve().IsStatic : true; result = ExtractField(fieldRef, isStatic); } else { throw new NotImplementedException(); } return(result); }
private AnalysisNet.IInstruction ProcessLoadToken(Cecil.Cil.Instruction op) { Cecil.MemberReference cciToken = op.Operand as Cecil.MemberReference; AnalysisNet.Types.IMetadataReference ourToken = typeExtractor.ExtractToken(cciToken); AnalysisNetBytecode.LoadTokenInstruction instruction = new AnalysisNetBytecode.LoadTokenInstruction((uint)op.Offset, ourToken); return(instruction); }