Ejemplo n.º 1
0
        internal static CallSite LoadCallSite(IBinaryAccessor accessor, Module module)
        {
            byte sigType = accessor.ReadByte();

            return(LoadCallSite(accessor, module, sigType));
        }
Ejemplo n.º 2
0
 internal BamlImageLoader(IBinaryAccessor accessor)
 {
     _accessor = accessor;
 }
 public static IBinaryAccessor Map(this IBinaryAccessor accessor)
 {
     return(accessor.Map(0, accessor.Length));
 }
        internal void Write(IBinaryAccessor accessor, ProjectWriteState state)
        {
            accessor.Write7BitEncodedInt(state.SetString(ProjectHelper.MakeRelativePath(_filePath, state.BasePath)));
            accessor.Write7BitEncodedInt(state.SetString(ProjectHelper.MakeRelativePath(_outputPath, state.BasePath)));
            accessor.Write((int)_flags);
            accessor.Write((int)_flags2);
            accessor.Write((int)_flags3);

            if (NameChanged)
            {
                accessor.Write7BitEncodedInt(state.SetString(_name));
            }

            if (CultureChanged)
            {
                accessor.Write7BitEncodedInt(state.SetString(_culture));
            }

            if (VersionChanged)
            {
                accessor.Write((ushort)_version.Major);
                accessor.Write((ushort)_version.Minor);
                accessor.Write((ushort)_version.Build);
                accessor.Write((ushort)_version.Revision);
            }

            if (TitleChanged)
            {
                accessor.Write7BitEncodedInt(state.SetString(_title));
            }

            if (DescriptionChanged)
            {
                accessor.Write7BitEncodedInt(state.SetString(_description));
            }

            if (CompanyChanged)
            {
                accessor.Write7BitEncodedInt(state.SetString(_company));
            }

            if (ProductChanged)
            {
                accessor.Write7BitEncodedInt(state.SetString(_product));
            }

            if (CopyrightChanged)
            {
                accessor.Write7BitEncodedInt(state.SetString(_copyright));
            }

            if (TrademarkChanged)
            {
                accessor.Write7BitEncodedInt(state.SetString(_trademark));
            }

            if (_sign != null)
            {
                accessor.Write(true);
                _sign.Write(accessor, state);
            }
            else
            {
                accessor.Write(false);
            }

            WriteModules(accessor, state);
            WriteResources(accessor, state);
        }
 internal ProjectType(IBinaryAccessor accessor, ProjectReadState state)
 {
     Read(accessor, state);
 }
Ejemplo n.º 6
0
        protected unsafe void Read(IBinaryAccessor accessor)
        {
            // DOS
            DOSHeader dosHeader;

            fixed(byte *pBuff = accessor.ReadBytes(PEConstants.DosHeaderSize))
            {
                dosHeader = *(DOSHeader *)pBuff;
            }

            if (dosHeader.Signature != PEConstants.DosSignature)
            {
                throw new BadImageFormatException(SR.DOSHeaderSignatureNotValid);
            }

            accessor.Position = dosHeader.Lfanew;

            // NT Signature
            if (accessor.ReadUInt32() != PEConstants.NTSignature)
            {
                throw new BadImageFormatException(SR.PESignatureNotValid);
            }

            // COFF
            COFFHeader coffHeader;

            fixed(byte *pBuff = accessor.ReadBytes(PEConstants.COFFHeaderSize))
            {
                coffHeader = *(COFFHeader *)pBuff;
            }

            _characteristics = coffHeader.Characteristics;
            _machine         = coffHeader.Machine;

            // PE
            ushort peMagic = accessor.ReadUInt16();

            accessor.Position -= 2;
            if (peMagic == PEConstants.PEMagic32)
            {
                _is32Bits = true;

                PEHeader peHeader;
                fixed(byte *pBuff = accessor.ReadBytes(PEConstants.PEHeaderSize))
                {
                    peHeader = *(PEHeader *)pBuff;
                }

                _addressOfEntryPoint = peHeader.AddressOfEntryPoint;
                _imageBase           = peHeader.ImageBase;
                _sectionAlignment    = peHeader.SectionAlignment;
                _fileAlignment       = peHeader.FileAlignment;
                _subsystem           = peHeader.Subsystem;
                _dllCharacteristics  = peHeader.DllCharacteristics;
                _sizeOfStackReserve  = peHeader.SizeOfStackReserve;
            }
            else if (peMagic == 0x20b)
            {
                _is32Bits = false;

                PEHeader64 peHeader;
                fixed(byte *pBuff = accessor.ReadBytes(PEConstants.PEHeader64Size))
                {
                    peHeader = *(PEHeader64 *)pBuff;
                }

                _addressOfEntryPoint = peHeader.AddressOfEntryPoint;
                _imageBase           = peHeader.ImageBase;
                _sectionAlignment    = peHeader.SectionAlignment;
                _fileAlignment       = peHeader.FileAlignment;
                _subsystem           = peHeader.Subsystem;
                _dllCharacteristics  = peHeader.DllCharacteristics;
                _sizeOfStackReserve  = peHeader.SizeOfStackReserve;
            }
            else
            {
                throw new BadImageFormatException(SR.PEHeaderSignatureNotValid);
            }

            // Directories
            for (int i = 0; i < PEConstants.NumberOfRvaAndSizes; i++)
            {
                fixed(byte *pBuff = accessor.ReadBytes(8))
                {
                    _directories[i] = *(DataDirectory *)pBuff;
                }
            }

            // Sections
            _sections = new PESection[coffHeader.NumberOfSections];
            for (int i = 0; i < coffHeader.NumberOfSections; i++)
            {
                _sections[i] = PESection.Read(accessor);
            }
        }
 internal ProjectAssembly(IBinaryAccessor accessor, ProjectReadState state)
 {
     Read(accessor, state);
 }
Ejemplo n.º 8
0
 public static void Write(this IBinaryAccessor accessor, DataDirectory dd)
 {
     accessor.Write((uint)dd.RVA);
     accessor.Write((int)dd.Size);
 }
Ejemplo n.º 9
0
 internal ModuleObjectState(ModuleState state, IBinaryAccessor accessor)
 {
     _state = state;
     Deserialize(accessor);
 }
        internal static FunctionPointer LoadFnPtr(IBinaryAccessor accessor, Module module)
        {
            var callSite = CallSite.LoadCallSite(accessor, module);

            return(new FunctionPointer(callSite));
        }
Ejemplo n.º 11
0
 public static DataDirectory ReadDataDirectory(this IBinaryAccessor accessor)
 {
     return(new DataDirectory(accessor.ReadUInt32(), accessor.ReadInt32()));
 }
 public StringSerializer(IBinaryAccessor accessor, IEqualityComparer <string> comparer)
     : base(accessor, comparer)
 {
 }
 public StringSerializer(IBinaryAccessor accessor)
     : base(accessor, StringComparer.Ordinal)
 {
 }
        internal void Load(IBinaryAccessor accessor)
        {
            int count = accessor.ReadUInt16();

            Load(accessor, count);
        }
Ejemplo n.º 15
0
 public override void Deserialize(IBinaryAccessor accessor)
 {
     _debuggingModes = accessor.Read7BitEncodedInt();
 }
Ejemplo n.º 16
0
        public void Save(IBinaryAccessor accessor)
        {
            if (accessor == null)
            {
                throw new ArgumentNullException("accessor");
            }

            // DOS
            accessor.Write((ushort)PEConstants.DosSignature);
            accessor.Write((ushort)0x90);      // BytesInLastBlock
            accessor.Write((ushort)3);         // BlocksInFile
            accessor.Write((ushort)0);         // NumRelocs
            accessor.Write((ushort)4);         // HeaderParagraphs
            accessor.Write((ushort)0);         // MinExtraParagraphs
            accessor.Write((ushort)0xFFFF);    // MaxExtraParagraphs
            accessor.Write((ushort)0);         // SS
            accessor.Write((ushort)0xB8);      // SP
            accessor.Write((ushort)0);         // Checksum
            accessor.Write((ushort)0);         // IP
            accessor.Write((ushort)0);         // CS
            accessor.Write((ushort)0x40);      // RelocTableOffset
            accessor.Write((ushort)0);         // OverlayNumber
            accessor.Write(0, 32);             // Reserved

            if ((_characteristics & ImageCharacteristics.EXECUTABLE_IMAGE) != 0)
            {
                accessor.Write((uint)(PEConstants.DosHeaderSize + PEConstants.DosX86Stub.Length));                 // Lfanew
            }
            else
            {
                accessor.Write((uint)0);                 // Image file is not valid
            }
            accessor.Write(PEConstants.DosX86Stub);

            // NT Signature
            accessor.Write((uint)PEConstants.NTSignature);

            // COFF
            accessor.Write((ushort)Machine);
            accessor.Write((ushort)_sections.Count);          // NumberOfSections
            accessor.Write((uint)TimeDateStamp.To_time_t());
            accessor.Write((uint)0);                          // PointerToSymbolTable
            accessor.Write((uint)0);                          // NumberOfSymbols
            accessor.Write((ushort)(Is32Bits ? 0xE0 : 0xF0)); // SizeOfOptionalHeader
            accessor.Write((ushort)Characteristics);

            // PE Standard
            if (Is32Bits)
            {
                accessor.Write((ushort)PEConstants.PEMagic32);
            }
            else
            {
                accessor.Write((ushort)PEConstants.PEMagic64);
            }

            accessor.Write((byte)MajorLinkerVersion);
            accessor.Write((byte)MinorLinkerVersion);
            accessor.Write((uint)SizeOfCode);
            accessor.Write((uint)SizeOfInitializedData);
            accessor.Write((uint)SizeOfUninitializedData);
            accessor.Write((uint)AddressOfEntryPoint);
            accessor.Write((uint)BaseOfCode);

            if (Is32Bits)
            {
                accessor.Write((uint)BaseOfData);
            }

            // NT Specific
            if (Is32Bits)
            {
                accessor.Write((uint)ImageBase);
            }
            else
            {
                accessor.Write((ulong)ImageBase);
            }

            accessor.Write((uint)SectionAlignment);
            accessor.Write((uint)FileAlignment);
            accessor.Write((ushort)MajorOperatingSystemVersion);
            accessor.Write((ushort)MinorOperatingSystemVersion);
            accessor.Write((ushort)MajorImageVersion);
            accessor.Write((ushort)MinorImageVersion);
            accessor.Write((ushort)MajorSubsystemVersion);
            accessor.Write((ushort)MinorSubsystemVersion);
            accessor.Write((uint)0);             // Win32VersionValue
            accessor.Write((uint)SizeOfImage);
            accessor.Write((uint)SizeOfHeaders);
            accessor.Write((uint)0);             // CheckSum
            accessor.Write((ushort)Subsystem);
            accessor.Write((ushort)DllCharacteristics);

            if (Is32Bits)
            {
                accessor.Write((uint)SizeOfStackReserve);
            }
            else
            {
                accessor.Write((ulong)SizeOfStackReserve);
            }

            if (Is32Bits)
            {
                accessor.Write((uint)SizeOfStackCommit);
            }
            else
            {
                accessor.Write((ulong)SizeOfStackCommit);
            }

            if (Is32Bits)
            {
                accessor.Write((uint)SizeOfHeapReserve);
            }
            else
            {
                accessor.Write((ulong)SizeOfHeapReserve);
            }

            if (Is32Bits)
            {
                accessor.Write((uint)SizeOfHeapCommit);
            }
            else
            {
                accessor.Write((ulong)SizeOfHeapCommit);
            }

            accessor.Write((uint)0);             // LoaderFlags (reserved)
            accessor.Write((uint)PEConstants.NumberOfRvaAndSizes);

            // Directories
            for (int i = 0; i < PEConstants.NumberOfRvaAndSizes; i++)
            {
                accessor.Write(_directories[i]);
            }

            // Write section headers
            foreach (var section in _sections)
            {
                string sectionName = section.Name.PadRight(8, '\0');
                accessor.Write(sectionName, Encoding.ASCII);
                accessor.Write((uint)section.VirtualSize);
                accessor.Write((uint)section.RVA);
                accessor.Write((uint)section.SizeOfRawData);
                accessor.Write((uint)section.PointerToRawData);
                accessor.Write((uint)0);                 // PointerToRelocations
                accessor.Write((uint)0);                 // PointerToLinenumbers
                accessor.Write((ushort)0);               // NumberOfRelocations
                accessor.Write((ushort)0);               // NumberOfLinenumbers
                accessor.Write((uint)section.Characteristics);
            }

            accessor.Write(0, (int)(SizeOfHeaders - accessor.Position));

            // Write section data
            foreach (var section in _sections)
            {
                int blobLength = 0;
                foreach (var blob in section.Blobs)
                {
                    if (blob.OffsetAlignment > 0)
                    {
                        int alignCount = blobLength.Align(blob.OffsetAlignment) - blobLength;
                        if (alignCount > 0)
                        {
                            accessor.Write(new byte[alignCount]);
                            blobLength += alignCount;
                        }
                    }

                    accessor.Write(blob.GetBuffer(), 0, blob.Length);
                    blobLength += blob.Length;
                }

                accessor.Write(0, (int)(section.SizeOfRawData - blobLength));
            }
        }
Ejemplo n.º 17
0
        public bool TryOpenImageToSectionData(uint rva, out IBinaryAccessor accessor)
        {
            PESection section;

            return(TryOpenImageToSectionData(rva, out accessor, out section));
        }
Ejemplo n.º 18
0
 public override void Deserialize(IBinaryAccessor accessor)
 {
     _assemblyIsPrivate     = accessor.ReadBoolean();
     _stripAfterObfuscation = accessor.ReadBoolean();
 }
Ejemplo n.º 19
0
        internal static ArrayType LoadSzArray(IBinaryAccessor accessor, Module module)
        {
            var elementType = Load(accessor, module);

            return(new ArrayType(elementType));
        }
Ejemplo n.º 20
0
 public override void Serialize(IBinaryAccessor accessor)
 {
     accessor.Write((bool)_assemblyIsPrivate);
     accessor.Write((bool)_stripAfterObfuscation);
 }
        internal void Read(IBinaryAccessor accessor, ProjectReadState state)
        {
            _filePath   = ProjectHelper.MakeAbsolutePath(state.GetString(accessor.Read7BitEncodedInt()), state.BasePath);
            _outputPath = ProjectHelper.MakeAbsolutePath(state.GetString(accessor.Read7BitEncodedInt()), state.BasePath);
            _flags      = accessor.ReadInt32();
            _flags2     = accessor.ReadInt32();
            _flags3     = accessor.ReadInt32();

            if (NameChanged)
            {
                _name = state.GetString(accessor.Read7BitEncodedInt());
            }

            if (CultureChanged)
            {
                _culture = state.GetString(accessor.Read7BitEncodedInt());
            }

            if (VersionChanged)
            {
                _version = new Version(accessor.ReadUInt16(), accessor.ReadUInt16(), accessor.ReadUInt16(), accessor.ReadUInt16());
            }

            if (TitleChanged)
            {
                _title = state.GetString(accessor.Read7BitEncodedInt());
            }

            if (DescriptionChanged)
            {
                _description = state.GetString(accessor.Read7BitEncodedInt());
            }

            if (CompanyChanged)
            {
                _company = state.GetString(accessor.Read7BitEncodedInt());
            }

            if (ProductChanged)
            {
                _product = state.GetString(accessor.Read7BitEncodedInt());
            }

            if (CopyrightChanged)
            {
                _copyright = state.GetString(accessor.Read7BitEncodedInt());
            }

            if (TrademarkChanged)
            {
                _trademark = state.GetString(accessor.Read7BitEncodedInt());
            }

            if (accessor.ReadBoolean())
            {
                _sign = new ProjectAssemblySign(accessor, state);
            }

            ReadModules(accessor, state);
            ReadResources(accessor, state);
        }
Ejemplo n.º 22
0
        private void LoadInstructions(IBinaryAccessor accessor, Module module, int codeSize)
        {
            long startOffset = accessor.Position;

            var image = module.Image;

            _instructions = new List <Instruction>();

            while (accessor.Position < startOffset + codeSize)
            {
                OpCode opCode;
                byte   opByte = accessor.ReadByte();
                if (opByte == 0xFE)
                {
                    opByte = accessor.ReadByte();
                    opCode = OpCodes.OpCodeArray[256 + opByte];
                }
                else
                {
                    opCode = OpCodes.OpCodeArray[opByte];
                }

                if (opCode == null)
                {
                    throw new CodeModelException(string.Format(SR.AssemblyLoadError, module.Location));
                }

                object value;
                switch (opCode.OperandType)
                {
                case OperandType.InlineBrTarget:
                {
                    value = accessor.ReadInt32();
                }
                break;

                case OperandType.InlineField:
                {
                    int token = accessor.ReadInt32();
                    value = FieldReference.Load(module, token);
                }
                break;

                case OperandType.InlineI:
                {
                    value = accessor.ReadInt32();
                }
                break;

                case OperandType.InlineI8:
                {
                    value = accessor.ReadInt64();
                }
                break;

                case OperandType.InlineMethod:
                {
                    int token = accessor.ReadInt32();
                    value = MethodReference.Load(module, token);
                }
                break;

                case OperandType.InlineR:
                {
                    value = accessor.ReadDouble();
                }
                break;

                case OperandType.InlineSig:
                {
                    int token = accessor.ReadInt32();
                    if (MetadataToken.GetType(token) == MetadataTokenType.Signature)
                    {
                        int rid = MetadataToken.GetRID(token);
                        value = CallSite.LoadStandAloneSig(module, rid);
                    }
                    else
                    {
                        throw new CodeModelException(SR.MethodBodyBlobNotValid);
                    }
                }
                break;

                case OperandType.InlineString:
                {
                    // Token of a userdefined string, whose RID portion is actually an offset in the #US blob stream.
                    uint token = accessor.ReadUInt32();
                    int  rid   = (int)(token & 0x00ffffff);
                    value = image.GetUserString(rid);
                }
                break;

                case OperandType.InlineSwitch:
                {
                    int   count   = accessor.ReadInt32();
                    int[] targets = new int[count];
                    for (int i = 0; i < count; i++)
                    {
                        targets[i] = accessor.ReadInt32();
                    }

                    value = targets;
                }
                break;

                case OperandType.InlineTok:
                {
                    int token = accessor.ReadInt32();
                    int rid   = MetadataToken.GetRID(token);
                    switch (MetadataToken.GetType(token))
                    {
                    case MetadataTokenType.Method:
                        value = MethodReference.LoadMethodDef(module, rid);
                        break;

                    case MetadataTokenType.MethodSpec:
                        value = GenericMethodReference.LoadMethodSpec(module, rid);
                        break;

                    case MetadataTokenType.MemberRef:
                        value = MethodReference.LoadMemberRef(module, rid);
                        break;

                    case MetadataTokenType.Field:
                        value = FieldReference.LoadFieldDef(module, rid);
                        break;

                    case MetadataTokenType.TypeDef:
                        value = TypeReference.LoadTypeDef(module, rid);
                        break;

                    case MetadataTokenType.TypeRef:
                        value = TypeReference.LoadTypeRef(module, rid);
                        break;

                    case MetadataTokenType.TypeSpec:
                        value = TypeSignature.LoadTypeSpec(module, rid);
                        break;

                    default:
                        throw new CodeModelException(SR.MethodBodyBlobNotValid);
                    }
                }
                break;

                case OperandType.InlineType:
                {
                    int token = accessor.ReadInt32();
                    value = TypeSignature.Load(module, token);
                }
                break;

                case OperandType.InlineVar:
                {
                    value = accessor.ReadInt16();
                }
                break;

                case OperandType.ShortInlineBrTarget:
                {
                    value = accessor.ReadSByte();
                }
                break;

                case OperandType.ShortInlineI:
                {
                    value = accessor.ReadByte();
                }
                break;

                case OperandType.ShortInlineR:
                {
                    value = accessor.ReadSingle();
                }
                break;

                case OperandType.ShortInlineVar:
                {
                    value = accessor.ReadByte();
                }
                break;

                default:
                {
                    value = null;
                }
                break;
                }

                _instructions.Add(new Instruction(opCode, value));
            }
        }
        private void ReadStreams(IBinaryAccessor accessor, long metadataOffset)
        {
            int numberOfStream = accessor.ReadUInt16();

            int[]    offsets = new int[numberOfStream];
            int[]    sizes   = new int[numberOfStream];
            string[] names   = new string[numberOfStream];

            for (int i = 0; i < numberOfStream; i++)
            {
                offsets[i] = accessor.ReadInt32();
                sizes[i]   = accessor.ReadInt32();

                // Name of the stream; a zero-terminated ASCII string no longer than 31 characters (plus zero terminator).
                // The name might be shorter, in which case the size of the stream header is correspondingly reduced,
                // padded to the 4-byte boundary.
                long startPos = accessor.Position;
                names[i] = accessor.ReadNullTerminatedString(Encoding.ASCII);
                accessor.Align(startPos, 4);
            }

            int tableIndex = -1;

            for (int i = 0; i < numberOfStream; i++)
            {
                int    offset = offsets[i];
                int    size   = sizes[i];
                string name   = names[i];

                if (name == MetadataConstants.StreamTable)
                {
                    tableIndex          = i;
                    _tables.IsOptimized = true;
                }
                else if (name == MetadataConstants.StreamTableUnoptimized)
                {
                    tableIndex          = i;
                    _tables.IsOptimized = false;
                }
                else if (name == MetadataConstants.StreamStrings)
                {
                    accessor.Position = offset + metadataOffset;
                    _strings.Blob     = new Blob(accessor.ReadBytes(size));
                }
                else if (name == MetadataConstants.StreamUserStrings)
                {
                    accessor.Position = offset + metadataOffset;
                    _userStrings.Blob = new Blob(accessor.ReadBytes(size));
                }
                else if (name == MetadataConstants.StreamGuid)
                {
                    accessor.Position = offset + metadataOffset;
                    _guids.Blob       = new Blob(accessor.ReadBytes(size));
                }
                else if (name == MetadataConstants.StreamBlob)
                {
                    accessor.Position = offset + metadataOffset;
                    _blobs.Blob       = new Blob(accessor.ReadBytes(size));
                }
                else
                {
                    accessor.Position = offset + metadataOffset;
                    var stream = new MetadataExternalStream(name, new Blob(accessor.ReadBytes(size)));
                    ExternalStreams.Add(stream);
                }
            }

            if (tableIndex >= 0)
            {
                // Read table last as it relies on heaps.
                accessor.Position = offsets[tableIndex] + metadataOffset;
                _tables.Read(accessor);
            }
        }
Ejemplo n.º 24
0
        private void StateLoadInstructions(IBinaryAccessor accessor, Module module)
        {
            int instructionCount = accessor.Read7BitEncodedInt();

            _instructions = new List <Instruction>(instructionCount);

            for (int i = 0; i < instructionCount; i++)
            {
                OpCode opCode;
                byte   opByte = accessor.ReadByte();
                if (opByte == 0xFE)
                {
                    opByte = accessor.ReadByte();
                    opCode = OpCodes.OpCodeArray[256 + opByte];
                }
                else
                {
                    opCode = OpCodes.OpCodeArray[opByte];
                }

                object value;
                switch (opCode.OperandType)
                {
                case OperandType.InlineBrTarget:
                {
                    value = accessor.ReadInt32();
                }
                break;

                case OperandType.InlineField:
                {
                    int token = accessor.ReadInt32();
                    value = module.GetSignature <Signature>(token);
                }
                break;

                case OperandType.InlineI:
                {
                    value = accessor.ReadInt32();
                }
                break;

                case OperandType.InlineI8:
                {
                    value = accessor.ReadInt64();
                }
                break;

                case OperandType.InlineMethod:
                {
                    int token = accessor.ReadInt32();
                    value = module.GetSignature <Signature>(token);
                }
                break;

                case OperandType.InlineR:
                {
                    value = accessor.ReadDouble();
                }
                break;

                case OperandType.InlineSig:
                {
                    int token = accessor.ReadInt32();
                    value = module.GetSignature <Signature>(token);
                }
                break;

                case OperandType.InlineString:
                {
                    // Token of a userdefined string, whose RID portion is actually an offset in the #US blob stream.
                    value = accessor.ReadLengthPrefixedString(Encoding.Unicode);
                }
                break;

                case OperandType.InlineSwitch:
                {
                    int   count   = accessor.ReadInt32();
                    int[] targets = new int[count];
                    for (int j = 0; j < count; j++)
                    {
                        targets[j] = accessor.ReadInt32();
                    }

                    value = targets;
                }
                break;

                case OperandType.InlineTok:
                {
                    int token = accessor.ReadInt32();
                    value = module.GetSignature <Signature>(token);
                }
                break;

                case OperandType.InlineType:
                {
                    int token = accessor.ReadInt32();
                    value = module.GetSignature <Signature>(token);
                }
                break;

                case OperandType.InlineVar:
                {
                    value = accessor.ReadInt16();
                }
                break;

                case OperandType.ShortInlineBrTarget:
                {
                    value = accessor.ReadSByte();
                }
                break;

                case OperandType.ShortInlineI:
                {
                    value = accessor.ReadByte();
                }
                break;

                case OperandType.ShortInlineR:
                {
                    value = accessor.ReadSingle();
                }
                break;

                case OperandType.ShortInlineVar:
                {
                    value = accessor.ReadByte();
                }
                break;

                default:
                {
                    value = null;
                }
                break;
                }

                _instructions.Add(new Instruction(opCode, value));
            }
        }
Ejemplo n.º 25
0
        internal static PinnedType LoadPinned(IBinaryAccessor accessor, Module module)
        {
            var elementType = Load(accessor, module);

            return(new PinnedType(elementType));
        }
Ejemplo n.º 26
0
 public abstract void Deserialize(IBinaryAccessor accessor);
 public static void Align(this IBinaryAccessor accessor, int align)
 {
     Align(accessor, 0, align);
 }
Ejemplo n.º 28
0
 public override void Serialize(IBinaryAccessor accessor)
 {
     accessor.Write7BitEncodedInt(_debuggingModes);
 }
 public static Guid ReadGuid(this IBinaryAccessor accessor)
 {
     return(new Guid(accessor.ReadBytes(16)));
 }
Ejemplo n.º 30
0
 public SignatureSerializer(IBinaryAccessor accessor)
     : base(accessor, SignatureComparer.Default)
 {
 }