public void Read(BinaryParser input)
        {
            // binaryHeaderEnum has already been read
            _objectId = input.ReadInt32();
            _name = input.ReadString();
            _numMembers = input.ReadInt32();
            _memberNames = new string[_numMembers];
            _binaryTypeEnumA = new BinaryTypeEnum[_numMembers];
            _typeInformationA = new object[_numMembers];
            _memberAssemIds = new int[_numMembers];
            for (int i = 0; i < _numMembers; i++)
            {
                _memberNames[i] = input.ReadString();
            }
            for (int i = 0; i < _numMembers; i++)
            {
                _binaryTypeEnumA[i] = (BinaryTypeEnum)input.ReadByte();
            }
            for (int i = 0; i < _numMembers; i++)
            {
                if (_binaryTypeEnumA[i] != BinaryTypeEnum.ObjectUrt && _binaryTypeEnumA[i] != BinaryTypeEnum.ObjectUser)
                {
                    _typeInformationA[i] = BinaryTypeConverter.ReadTypeInfo(_binaryTypeEnumA[i], input, out _memberAssemIds[i]);
                }
                else
                {
                    BinaryTypeConverter.ReadTypeInfo(_binaryTypeEnumA[i], input, out _memberAssemIds[i]);
                }
            }

            if (_binaryHeaderEnum == BinaryHeaderEnum.ObjectWithMapTypedAssemId)
            {
                _assemId = input.ReadInt32();
            }
        }
Esempio n. 2
0
        public void Read(BinaryParser input)
        {
            // binaryHeaderEnum has already been read
            _objectId         = input.ReadInt32();
            _name             = input.ReadString();
            _numMembers       = input.ReadInt32();
            _memberNames      = new string[_numMembers];
            _binaryTypeEnumA  = new BinaryTypeEnum[_numMembers];
            _typeInformationA = new object[_numMembers];
            _memberAssemIds   = new int[_numMembers];
            for (int i = 0; i < _numMembers; i++)
            {
                _memberNames[i] = input.ReadString();
            }
            for (int i = 0; i < _numMembers; i++)
            {
                _binaryTypeEnumA[i] = (BinaryTypeEnum)input.ReadByte();
            }
            for (int i = 0; i < _numMembers; i++)
            {
                if (_binaryTypeEnumA[i] != BinaryTypeEnum.ObjectUrt && _binaryTypeEnumA[i] != BinaryTypeEnum.ObjectUser)
                {
                    _typeInformationA[i] = BinaryTypeConverter.ReadTypeInfo(_binaryTypeEnumA[i], input, out _memberAssemIds[i]);
                }
                else
                {
                    BinaryTypeConverter.ReadTypeInfo(_binaryTypeEnumA[i], input, out _memberAssemIds[i]);
                }
            }

            if (_binaryHeaderEnum == BinaryHeaderEnum.ObjectWithMapTypedAssemId)
            {
                _assemId = input.ReadInt32();
            }
        }
Esempio n. 3
0
 public void Read(BinaryParser input, BinaryHeaderEnum binaryHeaderEnum)
 {
     //binaryHeaderEnum = input.ReadByte(); already read
     switch (binaryHeaderEnum)
     {
         case BinaryHeaderEnum.ObjectNull:
             _nullCount = 1;
             break;
         case BinaryHeaderEnum.ObjectNullMultiple256:
             _nullCount = input.ReadByte();
             break;
         case BinaryHeaderEnum.ObjectNullMultiple:
             _nullCount = input.ReadInt32();
             break;
     }
 }
Esempio n. 4
0
        public void Read(BinaryParser input, BinaryHeaderEnum binaryHeaderEnum)
        {
            //binaryHeaderEnum = input.ReadByte(); already read
            switch (binaryHeaderEnum)
            {
            case BinaryHeaderEnum.ObjectNull:
                _nullCount = 1;
                break;

            case BinaryHeaderEnum.ObjectNullMultiple256:
                _nullCount = input.ReadByte();
                break;

            case BinaryHeaderEnum.ObjectNullMultiple:
                _nullCount = input.ReadInt32();
                break;
            }
        }
Esempio n. 5
0
 public void Read(BinaryParser input)
 {
     _primitiveTypeEnum = (InternalPrimitiveTypeE)input.ReadByte(); //PDJ
     _value             = input.ReadValue(_primitiveTypeEnum);
 }
Esempio n. 6
0
        public static PEHeader Parse(BinaryParser br)
        {
            PEHeaderType signature = (PEHeaderType)br.ReadUInt16();

            if (!Enum.IsDefined(typeof(PEHeaderType), signature))
            {
                InvalidPEFileException.ThrowInvalidPEHeader();
            }

            PEHeader hdr = new PEHeader();

            hdr.Type                    = signature;
            hdr.LinkerVersion           = new Version(br.ReadByte(), br.ReadByte());
            hdr.SizeOfCode              = br.ReadUInt32();
            hdr.SizeOfInitializedData   = br.ReadUInt32();
            hdr.SizeOfUninitializedData = br.ReadUInt32();
            hdr.AddressOfEntryPoint     = br.ReadUInt32();
            hdr.BaseOfCode              = br.ReadUInt32();

            if (signature == PEHeaderType.PE64)
            {
                hdr.ImageBase = br.ReadUInt64();
            }
            else
            {
                hdr.BaseOfData = br.ReadUInt32();
                hdr.ImageBase  = br.ReadUInt32();
            }

            hdr.SectionAlignment       = br.ReadUInt32();
            hdr.FileAlignment          = br.ReadUInt32();
            hdr.OperatingSystemVersion = new Version(br.ReadUInt16(), br.ReadUInt16());
            hdr.ImageVersion           = new Version(br.ReadUInt16(), br.ReadUInt16());
            hdr.SubsystemVersion       = new Version(br.ReadUInt16(), br.ReadUInt16());
            hdr.Win32VersionValue      = br.ReadUInt32();
            hdr.SizeOfImage            = br.ReadUInt32();
            hdr.SizeOfHeaders          = br.ReadUInt32();
            hdr.Checksum           = br.ReadUInt32();
            hdr.Subsystem          = (PESubsystem)br.ReadUInt16();
            hdr.DllCharacteristics = (PEDllCharacteristics)br.ReadUInt16();

            if (signature == PEHeaderType.PE64)
            {
                hdr.SizeOfStackReserve = br.ReadUInt64();
                hdr.SizeOfStackCommit  = br.ReadUInt64();
                hdr.SizeOfHeapReserve  = br.ReadUInt64();
                hdr.SizeOfHeapCommit   = br.ReadUInt64();
            }
            else
            {
                hdr.SizeOfStackReserve = br.ReadUInt32();
                hdr.SizeOfStackCommit  = br.ReadUInt32();
                hdr.SizeOfHeapReserve  = br.ReadUInt32();
                hdr.SizeOfHeapCommit   = br.ReadUInt32();
            }

            hdr.LoaderFlags = br.ReadUInt32();

            hdr.DataDirectories = new PEDataDirectory[br.ReadUInt32()];
            for (int i = 0; i < hdr.DataDirectories.Length; i++)
            {
                hdr.DataDirectories[i] = br.ReadRecord <PEDataDirectory>();
            }

            return(hdr);
        }
Esempio n. 7
0
        private static Object ReadIntegral(BinaryParser parser, TypeCode typeCode)
        {
            switch (typeCode)
            {
                case TypeCode.Byte: return parser.ReadByte();
                case TypeCode.UInt16: return parser.ReadUInt16();
                case TypeCode.UInt32: return parser.ReadUInt32();
                case TypeCode.UInt64: return parser.ReadUInt64();

                case TypeCode.SByte: return parser.ReadSByte();
                case TypeCode.Int16: return parser.ReadInt16();
                case TypeCode.Int32: return parser.ReadInt32();
                case TypeCode.Int64: return parser.ReadInt64();
            }

            return null;
        }
Esempio n. 8
0
        public void Read(BinaryParser input)
        {
            switch (_binaryHeaderEnum)
            {
            case BinaryHeaderEnum.ArraySinglePrimitive:
                _objectId            = input.ReadInt32();
                _lengthA             = new int[1];
                _lengthA[0]          = input.ReadInt32();
                _binaryArrayTypeEnum = BinaryArrayTypeEnum.Single;
                _rank            = 1;
                _lowerBoundA     = new int[_rank];
                _binaryTypeEnum  = BinaryTypeEnum.Primitive;
                _typeInformation = (InternalPrimitiveTypeE)input.ReadByte();
                break;

            case BinaryHeaderEnum.ArraySingleString:
                _objectId            = input.ReadInt32();
                _lengthA             = new int[1];
                _lengthA[0]          = input.ReadInt32();
                _binaryArrayTypeEnum = BinaryArrayTypeEnum.Single;
                _rank            = 1;
                _lowerBoundA     = new int[_rank];
                _binaryTypeEnum  = BinaryTypeEnum.String;
                _typeInformation = null;
                break;

            case BinaryHeaderEnum.ArraySingleObject:
                _objectId            = input.ReadInt32();
                _lengthA             = new int[1];
                _lengthA[0]          = input.ReadInt32();
                _binaryArrayTypeEnum = BinaryArrayTypeEnum.Single;
                _rank            = 1;
                _lowerBoundA     = new int[_rank];
                _binaryTypeEnum  = BinaryTypeEnum.Object;
                _typeInformation = null;
                break;

            default:
                _objectId            = input.ReadInt32();
                _binaryArrayTypeEnum = (BinaryArrayTypeEnum)input.ReadByte();
                _rank        = input.ReadInt32();
                _lengthA     = new int[_rank];
                _lowerBoundA = new int[_rank];
                for (int i = 0; i < _rank; i++)
                {
                    _lengthA[i] = input.ReadInt32();
                }
                if ((_binaryArrayTypeEnum == BinaryArrayTypeEnum.SingleOffset) ||
                    (_binaryArrayTypeEnum == BinaryArrayTypeEnum.JaggedOffset) ||
                    (_binaryArrayTypeEnum == BinaryArrayTypeEnum.RectangularOffset))
                {
                    for (int i = 0; i < _rank; i++)
                    {
                        _lowerBoundA[i] = input.ReadInt32();
                    }
                }
                _binaryTypeEnum  = (BinaryTypeEnum)input.ReadByte();
                _typeInformation = BinaryTypeConverter.ReadTypeInfo(_binaryTypeEnum, input, out _assemId);
                break;
            }
        }
Esempio n. 9
0
 public void Read(BinaryParser input)
 {
     _primitiveTypeEnum = (InternalPrimitiveTypeE)input.ReadByte(); //PDJ
     _value = input.ReadValue(_primitiveTypeEnum);
 }
Esempio n. 10
0
 public void Read(BinaryParser input)
 {
     switch (_binaryHeaderEnum)
     {
         case BinaryHeaderEnum.ArraySinglePrimitive:
             _objectId = input.ReadInt32();
             _lengthA = new int[1];
             _lengthA[0] = input.ReadInt32();
             _binaryArrayTypeEnum = BinaryArrayTypeEnum.Single;
             _rank = 1;
             _lowerBoundA = new int[_rank];
             _binaryTypeEnum = BinaryTypeEnum.Primitive;
             _typeInformation = (InternalPrimitiveTypeE)input.ReadByte();
             break;
         case BinaryHeaderEnum.ArraySingleString:
             _objectId = input.ReadInt32();
             _lengthA = new int[1];
             _lengthA[0] = input.ReadInt32();
             _binaryArrayTypeEnum = BinaryArrayTypeEnum.Single;
             _rank = 1;
             _lowerBoundA = new int[_rank];
             _binaryTypeEnum = BinaryTypeEnum.String;
             _typeInformation = null;
             break;
         case BinaryHeaderEnum.ArraySingleObject:
             _objectId = input.ReadInt32();
             _lengthA = new int[1];
             _lengthA[0] = input.ReadInt32();
             _binaryArrayTypeEnum = BinaryArrayTypeEnum.Single;
             _rank = 1;
             _lowerBoundA = new int[_rank];
             _binaryTypeEnum = BinaryTypeEnum.Object;
             _typeInformation = null;
             break;
         default:
             _objectId = input.ReadInt32();
             _binaryArrayTypeEnum = (BinaryArrayTypeEnum)input.ReadByte();
             _rank = input.ReadInt32();
             _lengthA = new int[_rank];
             _lowerBoundA = new int[_rank];
             for (int i = 0; i < _rank; i++)
             {
                 _lengthA[i] = input.ReadInt32();
             }
             if ((_binaryArrayTypeEnum == BinaryArrayTypeEnum.SingleOffset) ||
                 (_binaryArrayTypeEnum == BinaryArrayTypeEnum.JaggedOffset) ||
                 (_binaryArrayTypeEnum == BinaryArrayTypeEnum.RectangularOffset))
             {
                 for (int i = 0; i < _rank; i++)
                 {
                     _lowerBoundA[i] = input.ReadInt32();
                 }
             }
             _binaryTypeEnum = (BinaryTypeEnum)input.ReadByte();
             _typeInformation = BinaryTypeConverter.ReadTypeInfo(_binaryTypeEnum, input, out _assemId);
             break;
     }
 }
Esempio n. 11
0
        public static PEHeader Parse(BinaryParser br)
        {
            PEHeaderType signature = (PEHeaderType)br.ReadUInt16();
            if (!Enum.IsDefined(typeof(PEHeaderType), signature))
            {
                InvalidPEFileException.ThrowInvalidPEHeader();
            }

            PEHeader hdr = new PEHeader();

            hdr.Type = signature;
            hdr.LinkerVersion = new Version(br.ReadByte(), br.ReadByte());
            hdr.SizeOfCode = br.ReadUInt32();
            hdr.SizeOfInitializedData = br.ReadUInt32();
            hdr.SizeOfUninitializedData = br.ReadUInt32();
            hdr.AddressOfEntryPoint = br.ReadUInt32();
            hdr.BaseOfCode = br.ReadUInt32();

            if (signature == PEHeaderType.PE64)
            {
                hdr.ImageBase = br.ReadUInt64();
            }
            else
            {
                hdr.BaseOfData = br.ReadUInt32();
                hdr.ImageBase = br.ReadUInt32();
            }

            hdr.SectionAlignment = br.ReadUInt32();
            hdr.FileAlignment = br.ReadUInt32();
            hdr.OperatingSystemVersion = new Version(br.ReadUInt16(), br.ReadUInt16());
            hdr.ImageVersion = new Version(br.ReadUInt16(), br.ReadUInt16());
            hdr.SubsystemVersion = new Version(br.ReadUInt16(), br.ReadUInt16());
            hdr.Win32VersionValue = br.ReadUInt32();
            hdr.SizeOfImage = br.ReadUInt32();
            hdr.SizeOfHeaders = br.ReadUInt32();
            hdr.Checksum = br.ReadUInt32();
            hdr.Subsystem = (PESubsystem)br.ReadUInt16();
            hdr.DllCharacteristics = (PEDllCharacteristics)br.ReadUInt16();

            if (signature == PEHeaderType.PE64)
            {
                hdr.SizeOfStackReserve = br.ReadUInt64();
                hdr.SizeOfStackCommit = br.ReadUInt64();
                hdr.SizeOfHeapReserve = br.ReadUInt64();
                hdr.SizeOfHeapCommit = br.ReadUInt64();
            }
            else
            {
                hdr.SizeOfStackReserve = br.ReadUInt32();
                hdr.SizeOfStackCommit = br.ReadUInt32();
                hdr.SizeOfHeapReserve = br.ReadUInt32();
                hdr.SizeOfHeapCommit = br.ReadUInt32();
            }

            hdr.LoaderFlags = br.ReadUInt32();

            hdr.DataDirectories = new PEDataDirectory[br.ReadUInt32()];
            for (int i = 0; i < hdr.DataDirectories.Length; i++)
            {
                hdr.DataDirectories[i] = br.ReadRecord<PEDataDirectory>();
            }

            return hdr;
        }