Exemple #1
0
		private void LoadData(CLIFile pFile)
		{
			Type = (SigElementType)pFile.ReadByte();
			pFile.ReadByte();
			Parent.LoadData(pFile);
			Value = pFile.ReadBlobHeap(pFile.ReadHeapIndex(HeapOffsetSizes.Blob32Bit));
		}
Exemple #2
0
		public SigType(CLIFile pCLIFile, byte[] pSignature, ref int pCursor)
		{
			CLIFile = pCLIFile;

			ElementType = (SigElementType)pSignature[pCursor++];
			switch (ElementType)
			{
				case SigElementType.Array:
					ArrayType = new SigType(CLIFile, pSignature, ref pCursor);
					ArrayShape = new SigArrayShape(CLIFile, pSignature, ref pCursor);
					break;
				case SigElementType.Class:
					ClassTypeDefOrRefOrSpecToken = CLIFile.ReadCompressedUnsigned(pSignature, ref pCursor);
					break;
				case SigElementType.FunctionPointer:
					FnPtrMethodSig = new MethodSig(CLIFile, pSignature, ref pCursor);
					break;
				case SigElementType.GenericInstantiation:
					{
						GenericInstClass = pSignature[pCursor] == (byte)SigElementType.Class;
						GenericInstValueType = pSignature[pCursor] == (byte)SigElementType.ValueType;
						++pCursor;
						GenericInstTypeDefOrRefOrSpecToken = CLIFile.ReadCompressedUnsigned(pSignature, ref pCursor);
						uint genericInstGenArgCount = CLIFile.ReadCompressedUnsigned(pSignature, ref pCursor);
						GenericInstGenArgs = new List<SigType>((int)genericInstGenArgCount);
						for (uint genericInstGenArgIndex = 0; genericInstGenArgIndex < genericInstGenArgCount; ++genericInstGenArgIndex) GenericInstGenArgs.Add(new SigType(CLIFile, pSignature, ref pCursor));
						break;
					}
				case SigElementType.MethodVar:
					MVarNumber = CLIFile.ReadCompressedUnsigned(pSignature, ref pCursor);
					break;
				case SigElementType.Pointer:
					while (pSignature[pCursor] == (byte)SigElementType.CustomModifier_Required ||
						   pSignature[pCursor] == (byte)SigElementType.CustomModifier_Optional)
					{
						PtrMods.Add(new SigCustomMod(CLIFile, pSignature, ref pCursor));
					}
					if (pSignature[pCursor] == (byte)SigElementType.Void)
					{
						PtrVoid = true;
						++pCursor;
					}
					else PtrType = new SigType(CLIFile, pSignature, ref pCursor);
					break;
				case SigElementType.SingleDimensionArray:
					while (pSignature[pCursor] == (byte)SigElementType.CustomModifier_Required ||
						   pSignature[pCursor] == (byte)SigElementType.CustomModifier_Optional)
					{
						SZArrayMods.Add(new SigCustomMod(CLIFile, pSignature, ref pCursor));
					}
					SZArrayType = new SigType(CLIFile, pSignature, ref pCursor);
					break;
				case SigElementType.ValueType:
					ValueTypeDefOrRefOrSpecToken = CLIFile.ReadCompressedUnsigned(pSignature, ref pCursor);
					break;
				case SigElementType.Var:
					VarNumber = CLIFile.ReadCompressedUnsigned(pSignature, ref pCursor);
					break;

				default: break;
			}
		}
Exemple #3
0
        public SigType(CLIFile pCLIFile, byte[] pSignature, ref int pCursor)
        {
            CLIFile = pCLIFile;

            ElementType = (SigElementType)pSignature[pCursor++];
            switch (ElementType)
            {
            case SigElementType.Array:
                ArrayType  = new SigType(CLIFile, pSignature, ref pCursor);
                ArrayShape = new SigArrayShape(CLIFile, pSignature, ref pCursor);
                break;

            case SigElementType.Class:
                ClassTypeDefOrRefOrSpecToken = CLIFile.ReadCompressedUnsigned(pSignature, ref pCursor);
                break;

            case SigElementType.FunctionPointer:
                FnPtrMethodSig = new MethodSig(CLIFile, pSignature, ref pCursor);
                break;

            case SigElementType.GenericInstantiation:
            {
                GenericInstClass     = pSignature[pCursor] == (byte)SigElementType.Class;
                GenericInstValueType = pSignature[pCursor] == (byte)SigElementType.ValueType;
                ++pCursor;
                GenericInstTypeDefOrRefOrSpecToken = CLIFile.ReadCompressedUnsigned(pSignature, ref pCursor);
                uint genericInstGenArgCount = CLIFile.ReadCompressedUnsigned(pSignature, ref pCursor);
                GenericInstGenArgs = new List <SigType>((int)genericInstGenArgCount);
                for (uint genericInstGenArgIndex = 0; genericInstGenArgIndex < genericInstGenArgCount; ++genericInstGenArgIndex)
                {
                    GenericInstGenArgs.Add(new SigType(CLIFile, pSignature, ref pCursor));
                }
                break;
            }

            case SigElementType.MethodVar:
                MVarNumber = CLIFile.ReadCompressedUnsigned(pSignature, ref pCursor);
                break;

            case SigElementType.Pointer:
                while (pSignature[pCursor] == (byte)SigElementType.CustomModifier_Required ||
                       pSignature[pCursor] == (byte)SigElementType.CustomModifier_Optional)
                {
                    PtrMods.Add(new SigCustomMod(CLIFile, pSignature, ref pCursor));
                }
                if (pSignature[pCursor] == (byte)SigElementType.Void)
                {
                    PtrVoid = true;
                    ++pCursor;
                }
                else
                {
                    PtrType = new SigType(CLIFile, pSignature, ref pCursor);
                }
                break;

            case SigElementType.SingleDimensionArray:
                while (pSignature[pCursor] == (byte)SigElementType.CustomModifier_Required ||
                       pSignature[pCursor] == (byte)SigElementType.CustomModifier_Optional)
                {
                    SZArrayMods.Add(new SigCustomMod(CLIFile, pSignature, ref pCursor));
                }
                SZArrayType = new SigType(CLIFile, pSignature, ref pCursor);
                break;

            case SigElementType.ValueType:
                ValueTypeDefOrRefOrSpecToken = CLIFile.ReadCompressedUnsigned(pSignature, ref pCursor);
                break;

            case SigElementType.Var:
                VarNumber = CLIFile.ReadCompressedUnsigned(pSignature, ref pCursor);
                break;

            default: break;
            }
        }