当前位置: 首页>>代码示例>>C#>>正文


C# Module.ResolveSignature方法代码示例

本文整理汇总了C#中System.Reflection.Module.ResolveSignature方法的典型用法代码示例。如果您正苦于以下问题:C# Module.ResolveSignature方法的具体用法?C# Module.ResolveSignature怎么用?C# Module.ResolveSignature使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在System.Reflection.Module的用法示例。


在下文中一共展示了Module.ResolveSignature方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: ConstructInstructions

        /// <summary>
        /// Constructs the array of ILInstructions according to the IL byte code.
        /// </summary>
        /// <param name="module"></param>
        private void ConstructInstructions(Module module)
        {
            byte[] il = this.il;
            int position = 0;
            instructions = new List<ILInstruction>();
            while (position < il.Length)
            {
                ILInstruction instruction = new ILInstruction();

                // get the operation code of the current instruction
                OpCode code = OpCodes.Nop;
                ushort value = il[position++];
                if (value != 0xfe)
                {
                    code = Globals.singleByteOpCodes[(int)value];
                }
                else
                {
                    value = il[position++];
                    code = Globals.multiByteOpCodes[(int)value];
                    value = (ushort)(value | 0xfe00);
                }
                instruction.Code = code;
                instruction.Offset = position - 1;
                int metadataToken = 0;
                // get the operand of the current operation
                switch (code.OperandType)
                {
                    case OperandType.InlineBrTarget:
                        metadataToken = ReadInt32(il, ref position);
                        metadataToken += position;
                        instruction.Operand = metadataToken;
                        break;

                    // patched from comments on CP -hwd
                    case OperandType.InlineField:
                        metadataToken = ReadInt32(il, ref position);
                        if (mi is ConstructorInfo)
                        {
                            instruction.Operand = module.ResolveField(metadataToken,
                                mi.DeclaringType.GetGenericArguments(), null);
                        }
                        else
                        {
                            instruction.Operand = module.ResolveField(metadataToken,
                                mi.DeclaringType.GetGenericArguments(), mi.GetGenericArguments());
                        }
                        break;

                    // patched from comments on CP -hwd
                    case OperandType.InlineMethod:
                        metadataToken = ReadInt32(il, ref position);
                        try
                        {
                            if (mi is ConstructorInfo)
                            {
                                instruction.Operand = module.ResolveMethod(metadataToken,
                                    mi.DeclaringType.GetGenericArguments(), null);
                            }
                            else
                            {
                                instruction.Operand = module.ResolveMethod(metadataToken,
                                    mi.DeclaringType.GetGenericArguments(), mi.GetGenericArguments());
                            }
                        }
                        catch
                        {
                            if (mi is ConstructorInfo)
                            {
                                instruction.Operand = module.ResolveMember(metadataToken,
                                    mi.DeclaringType.GetGenericArguments(), null);
                            }
                            else
                            {
                                instruction.Operand = module.ResolveMember(metadataToken,
                                    mi.DeclaringType.GetGenericArguments(), mi.GetGenericArguments());
                            }
                        }
                        break;

                    case OperandType.InlineSig:
                        metadataToken = ReadInt32(il, ref position);
                        instruction.Operand = module.ResolveSignature(metadataToken);
                        break;

                    // patched from comments on CP -hwd
                    case OperandType.InlineTok:
                        metadataToken = ReadInt32(il, ref position);
                        //try
                        //{
                            if (mi is ConstructorInfo)
                            {
                                instruction.Operand = module.ResolveType(metadataToken,
                                    mi.DeclaringType.GetGenericArguments(), null);
                            }
                            else
//.........这里部分代码省略.........
开发者ID:mayatforest,项目名称:Refractor,代码行数:101,代码来源:MethodBodyReader.cs

示例2: ConstructInstructions

        /// <summary>
        /// Constructs the array of ILInstructions according to the IL byte code.
        /// </summary>
        /// <param name="module"></param>
        private void ConstructInstructions(Module module)
        {
            byte[] il = this.il;
            int position = 0;
            instructions = new List<ILInstruction>();
            while (position < il.Length)
            {
                ILInstruction instruction = new ILInstruction();

                // get the operation code of the current instruction
                OpCode code = OpCodes.Nop;
                ushort value = il[position++];
                if (value != 0xfe)
                {
                    code = Globals.singleByteOpCodes[(int)value];
                }
                else
                {
                    value = il[position++];
                    code = Globals.multiByteOpCodes[(int)value];
                    value = (ushort)(value | 0xfe00);
                }
                instruction.Code = code;
                instruction.Offset = position - 1;
                int metadataToken = 0;
                // get the operand of the current operation
                switch (code.OperandType)
                {
                    case OperandType.InlineBrTarget:
                        metadataToken = ReadInt32(il, ref position);
                        metadataToken += position;
                        instruction.Operand = metadataToken;
                        break;
                    case OperandType.InlineField:
                        metadataToken = ReadInt32(il, ref position);
                        instruction.Operand = module.ResolveField(metadataToken);
                        break;
                    case OperandType.InlineMethod:
                        metadataToken = ReadInt32(il, ref position);
                        try
                        {
                            instruction.Operand = module.ResolveMethod(metadataToken);
                        }
                        catch
                        {
                            try
                            {
                                instruction.Operand = module.ResolveMember(metadataToken);
                            }
                            catch (Exception)
                            {
                                //Try generic method
                                try
                                {
                                    instruction.Operand = module.ResolveMethod(metadataToken, mi.DeclaringType.GetGenericArguments(), mi.GetGenericArguments());
                                }
                                catch (Exception)
                                {

                                    //Try generic member
                                    try
                                    {
                                        instruction.Operand = module.ResolveMember(metadataToken, mi.DeclaringType.GetGenericArguments(), mi.GetGenericArguments());
                                    }
                                    catch (Exception)
                                    {
                                        throw;
                                    }
                                }

                            }
                        }
                        break;
                    case OperandType.InlineSig:
                        metadataToken = ReadInt32(il, ref position);
                        instruction.Operand = module.ResolveSignature(metadataToken);
                        break;
                    case OperandType.InlineTok:
                        metadataToken = ReadInt32(il, ref position);
                        try
                        {
                            instruction.Operand = module.ResolveType(metadataToken);
                        }
                        catch
                        {

                        }
                        // SSS : see what to do here
                        break;
                     case OperandType.InlineType:
                        metadataToken = ReadInt32(il, ref position);
                        // now we call the ResolveType always using the generic attributes type in order
                        // to support decompilation of generic methods and classes

                        // thanks to the guys from code project who commented on this missing feature
                        try
//.........这里部分代码省略.........
开发者ID:himanshugoel2797,项目名称:MSIL2CPP,代码行数:101,代码来源:MethodBodyReader.cs

示例3: ToString

 public string ToString( Module module )
 {
     OpCode opCode = OpCode;
     string operandStr = "";
     int operandStart = _startIndex + opCode.Size;
     switch (opCode.OperandType)
     {
         case OperandType.InlineBrTarget:
             break;
         case OperandType.InlineField:
             operandStr = module.ResolveField(_il.GetInt32(operandStart)).Name;
             break;
         case OperandType.InlineI:
             operandStr = _il.GetInt32(operandStart).ToString();
             break;
         case OperandType.InlineI8:
             operandStr = _il.GetInt64(operandStart).ToString();
             break;
         case OperandType.InlineMethod:
             operandStr = module.ResolveMethod(_il.GetInt32(operandStart)).Name;
             break;
         case OperandType.InlineNone:
             break;
         case OperandType.InlineR:
             operandStr = _il.GetDouble(operandStart).ToString();
             break;
         case OperandType.InlineSig:
             operandStr = string.Join("",
                                      module.ResolveSignature(_il.GetInt32(operandStart))
                                            .Select(b => b.ToString("X2")));
             break;
         case OperandType.InlineString:
             operandStr = "\"" + module.ResolveString(_il.GetInt32(operandStart)) + "\"";
             break;
         case OperandType.InlineSwitch:
             break;
         case OperandType.InlineTok:
             operandStr = module.ResolveType(_il.GetInt32(operandStart)).Name;
             break;
         case OperandType.InlineType:
             operandStr = module.ResolveType(_il.GetInt32(operandStart)).Name;
             break;
         case OperandType.InlineVar:
             operandStr = _il.GetInt16(operandStart).ToString();
             break;
         case OperandType.ShortInlineBrTarget:
             break;
         case OperandType.ShortInlineI:
             operandStr = ((int) _il[operandStart]).ToString();
             break;
         case OperandType.ShortInlineR:
             operandStr = _il.GetSingle(operandStart).ToString();
             break;
         case OperandType.ShortInlineVar:
             operandStr = ((int) _il[operandStart]).ToString();
             break;
     }
     return opCode.Name + " " + operandStr;
 }
开发者ID:kazuk,项目名称:SimpleILer,代码行数:59,代码来源:ILInstruction.cs

示例4: ConstructInstructions

        private void ConstructInstructions(Module module)
        {
            byte[] localIlbytes = this.il;
            int position = 0;
            while (position < localIlbytes.Length)
            {
                var instruction = new ILInstruction();

                // get the operation code of the current instruction
                OpCode code;
                ushort value = localIlbytes[position++];
                if (GlobalIntermediateLanguageConstants.SingleByteOpCodes.Count == 0)
                {
                    throw new InvalidOperationException(
                        "Attempt to use Method Body Reader before Global Intermediate Language Constants has been initialised. Global Intermediate Language Constants. Load Op Codes must be called once.");
                }

                if (value != 0xfe)
                {
                    code = GlobalIntermediateLanguageConstants.SingleByteOpCodes[value];
                }
                else
                {
                    value = localIlbytes[position++];
                    code = GlobalIntermediateLanguageConstants.MultiByteOpCodes[value];
                }

                instruction.Code = code;
                instruction.Offset = position - 1;
                int metadataToken;

                // get the operand of the current operation
                switch (code.OperandType)
                {
                    case OperandType.InlineBrTarget:
                        metadataToken = ReadInt32(ref position);
                        metadataToken += position;
                        instruction.Operand = metadataToken;
                        break;
                    case OperandType.InlineField:

                        // TODO All these try catch blocks need to go
                        try
                        {
                            metadataToken = ReadInt32(ref position);
                            instruction.Operand = module.ResolveField(metadataToken);
                        }
                        catch
                        {
                            instruction.Operand = new object();
                        }

                        break;
                    case OperandType.InlineMethod:
                        metadataToken = ReadInt32(ref position);
                        try
                        {
                            instruction.Operand = module.ResolveMethod(metadataToken);
                        }
                        catch
                        {
                            instruction.Operand = new object();
                        }

                        break;
                    case OperandType.InlineSig:
                        metadataToken = ReadInt32(ref position);
                        instruction.Operand = module.ResolveSignature(metadataToken);
                        break;
                    case OperandType.InlineTok:
                        metadataToken = ReadInt32(ref position);
                        try
                        {
                            instruction.Operand = module.ResolveType(metadataToken);
                        }
                        catch
                        {
                        }

                        // TODO : see what to do here
                        break;
                    case OperandType.InlineType:
                        metadataToken = ReadInt32(ref position);

                        // now we call the ResolveType always using the generic attributes type in order
                        // to support decompilation of generic methods and classes
                        // thanks to the guys from code project who commented on this missing feature
                        Type[] declaringTypeGenericArgs = this.mi.DeclaringType.GetGenericArguments();
                        Type[] genericArgs = null;
                        if (this.mi.IsGenericMethod)
                        {
                            genericArgs = this.mi.GetGenericArguments();
                        }

                        instruction.Operand = module.ResolveType(metadataToken, declaringTypeGenericArgs, genericArgs);
                        break;
                    case OperandType.InlineI:
                        {
                            instruction.Operand = ReadInt32(ref position);
                            break;
//.........这里部分代码省略.........
开发者ID:Benrnz,项目名称:TypeVisualiser,代码行数:101,代码来源:MethodBodyReader.cs

示例5: ReadOperand

        private object ReadOperand(OpCode code, Module module, ref long localVariableIndex)
        {
            object operand = null;
            
            switch (code.OperandType)
            {
                case OperandType.InlineNone:
                    break;
                case OperandType.InlineSwitch:
                    int length = stream.ReadInt32();
                    int[] branches = new int[length];
                    int[] offsets = new int[length];
                    for (int i = 0; i < length; i++)
                    {
                        offsets[i] = stream.ReadInt32();
                    }
                    for (int i = 0; i < length; i++)
                    {
                        branches[i] = (int)stream.BaseStream.Position + offsets[i];
                    }

                    operand = (object) branches; // Just forget to save readed offsets
                    break;
                case OperandType.ShortInlineBrTarget:
                    if (code.FlowControl != FlowControl.Branch && code.FlowControl != FlowControl.Cond_Branch)
                    {
                        operand = stream.ReadSByte();
                    }
                    else
                    {
                        operand = stream.ReadSByte() + stream.BaseStream.Position;
                    }
                    break;
                case OperandType.InlineBrTarget:
                    operand = stream.ReadInt32()+ stream.BaseStream.Position;;
                    break;
                case OperandType.ShortInlineI:
                    if (code == OpCodes.Ldc_I4_S)
                        operand = (sbyte)stream.ReadByte();
                    else
                        operand = stream.ReadByte();
                    break;
                case OperandType.InlineI:
                    operand = stream.ReadInt32();
                    break;
                case OperandType.ShortInlineR:
                    operand = stream.ReadSingle();
                    break;
                case OperandType.InlineR:
                    operand = stream.ReadDouble();
                    break;
                case OperandType.InlineI8:
                    operand = stream.ReadInt64();
                    break;
                case OperandType.InlineSig:
                    operand = module.ResolveSignature(stream.ReadInt32());
                    break;
                case OperandType.InlineString:
                    operand = module.ResolveString(stream.ReadInt32());
                    break;
                case OperandType.InlineTok:
                case OperandType.InlineType:
                case OperandType.InlineMethod:
                case OperandType.InlineField:
                    operand = module.ResolveMember(stream.ReadInt32(), typeArgs, methodArgs);
                    break;
                case OperandType.ShortInlineVar:
                    {
                        int index = stream.ReadByte();
                        operand = GetVariable(code, index);
                        localVariableIndex = index;
                    }
                    break;
                case OperandType.InlineVar:
                    {
                        int index = stream.ReadUInt16();
                        operand = GetVariable(code, index);
                        localVariableIndex = index;
                    }
                    break;
                default:
                    throw new NotSupportedException();
            }

            return operand;
        }
开发者ID:fluxit,项目名称:SpaceEngineers,代码行数:86,代码来源:IlReader.cs


注:本文中的System.Reflection.Module.ResolveSignature方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。