ReadInt32() public method

public ReadInt32 ( ) : int
return int
示例#1
0
文件: Image.cs 项目: xliuGeonx/solid
        public ImageDebugDirectory GetDebugHeader(out byte [] header)
        {
            var section = GetSectionAtVirtualAddress(Debug.VirtualAddress);
            var buffer  = new ByteBuffer(section.Data);

            buffer.position = (int)(Debug.VirtualAddress - section.VirtualAddress);

            var directory = new ImageDebugDirectory {
                Characteristics  = buffer.ReadInt32(),
                TimeDateStamp    = buffer.ReadInt32(),
                MajorVersion     = buffer.ReadInt16(),
                MinorVersion     = buffer.ReadInt16(),
                Type             = buffer.ReadInt32(),
                SizeOfData       = buffer.ReadInt32(),
                AddressOfRawData = buffer.ReadInt32(),
                PointerToRawData = buffer.ReadInt32(),
            };

            buffer.position = (int)(directory.AddressOfRawData - section.VirtualAddress);

            header = new byte [directory.SizeOfData];
            Buffer.BlockCopy(buffer.buffer, buffer.position, header, 0, header.Length);

            return(directory);
        }
示例#2
0
        public ImageDebugDirectory GetDebugHeader(out byte[] header)
        {
            Section    sectionAtVirtualAddress = this.GetSectionAtVirtualAddress(this.Debug.VirtualAddress);
            ByteBuffer byteBuffer = new ByteBuffer(sectionAtVirtualAddress.Data)
            {
                position = (int)(this.Debug.VirtualAddress - sectionAtVirtualAddress.VirtualAddress)
            };
            ImageDebugDirectory imageDebugDirectory = new ImageDebugDirectory()
            {
                Characteristics  = byteBuffer.ReadInt32(),
                TimeDateStamp    = byteBuffer.ReadInt32(),
                MajorVersion     = byteBuffer.ReadInt16(),
                MinorVersion     = byteBuffer.ReadInt16(),
                Type             = byteBuffer.ReadInt32(),
                SizeOfData       = byteBuffer.ReadInt32(),
                AddressOfRawData = byteBuffer.ReadInt32(),
                PointerToRawData = byteBuffer.ReadInt32()
            };
            ImageDebugDirectory imageDebugDirectory1 = imageDebugDirectory;

            if (imageDebugDirectory1.SizeOfData == 0 || imageDebugDirectory1.PointerToRawData == 0)
            {
                header = Empty <byte> .Array;
                return(imageDebugDirectory1);
            }
            byteBuffer.position = (int)((long)imageDebugDirectory1.PointerToRawData - (ulong)sectionAtVirtualAddress.PointerToRawData);
            header = new byte[imageDebugDirectory1.SizeOfData];
            Buffer.BlockCopy(byteBuffer.buffer, byteBuffer.position, header, 0, (int)header.Length);
            return(imageDebugDirectory1);
        }
示例#3
0
        public ImageDebugDirectory GetDebugHeader(out byte[] header)
        {
            Section    sectionAtVirtualAddress = this.GetSectionAtVirtualAddress(this.Debug.VirtualAddress);
            ByteBuffer buffer = new ByteBuffer(sectionAtVirtualAddress.Data)
            {
                position = (int)(this.Debug.VirtualAddress - sectionAtVirtualAddress.VirtualAddress)
            };
            ImageDebugDirectory directory = new ImageDebugDirectory {
                Characteristics  = buffer.ReadInt32(),
                TimeDateStamp    = buffer.ReadInt32(),
                MajorVersion     = buffer.ReadInt16(),
                MinorVersion     = buffer.ReadInt16(),
                Type             = buffer.ReadInt32(),
                SizeOfData       = buffer.ReadInt32(),
                AddressOfRawData = buffer.ReadInt32(),
                PointerToRawData = buffer.ReadInt32()
            };

            if ((directory.SizeOfData == 0) || (directory.PointerToRawData == 0))
            {
                header = Empty <byte> .Array;
                return(directory);
            }
            buffer.position = directory.PointerToRawData - ((int)sectionAtVirtualAddress.PointerToRawData);
            header          = new byte[directory.SizeOfData];
            Buffer.BlockCopy(buffer.buffer, buffer.position, header, 0, header.Length);
            return(directory);
        }
示例#4
0
        void PatchRawCode(ByteBuffer buffer, int code_size, CodeWriter writer)
        {
            var metadata = writer.metadata;
            buffer.WriteBytes (ReadBytes (code_size));
            var end = buffer.position;
            buffer.position -= code_size;

            while (buffer.position < end) {
                OpCode opcode;
                var il_opcode = buffer.ReadByte ();
                if (il_opcode != 0xfe) {
                    opcode = OpCodes.OneByteOpCode [il_opcode];
                } else {
                    var il_opcode2 = buffer.ReadByte ();
                    opcode = OpCodes.TwoBytesOpCode [il_opcode2];
                }

                switch (opcode.OperandType) {
                case OperandType.ShortInlineI:
                case OperandType.ShortInlineBrTarget:
                case OperandType.ShortInlineVar:
                case OperandType.ShortInlineArg:
                    buffer.position += 1;
                    break;
                case OperandType.InlineVar:
                case OperandType.InlineArg:
                    buffer.position += 2;
                    break;
                case OperandType.InlineBrTarget:
                case OperandType.ShortInlineR:
                case OperandType.InlineI:
                    buffer.position += 4;
                    break;
                case OperandType.InlineI8:
                case OperandType.InlineR:
                    buffer.position += 8;
                    break;
                case OperandType.InlineSwitch:
                    var length = buffer.ReadInt32 ();
                    buffer.position += length * 4;
                    break;
                case OperandType.InlineString:
                    var @string = GetString (new MetadataToken (buffer.ReadUInt32 ()));
                    buffer.position -= 4;
                    buffer.WriteUInt32 (
                        new MetadataToken (
                            TokenType.String,
                            metadata.user_string_heap.GetStringIndex (@string)).ToUInt32 ());
                    break;
                case OperandType.InlineSig:
                    var call_site = GetCallSite (new MetadataToken (buffer.ReadUInt32 ()));
                    buffer.position -= 4;
                    buffer.WriteUInt32 (writer.GetStandAloneSignature (call_site).ToUInt32 ());
                    break;
                case OperandType.InlineTok:
                case OperandType.InlineType:
                case OperandType.InlineMethod:
                case OperandType.InlineField:
                    var provider = reader.LookupToken (new MetadataToken (buffer.ReadUInt32 ()));
                    buffer.position -= 4;
                    buffer.WriteUInt32 (metadata.LookupToken (provider).ToUInt32 ());
                    break;
                }
            }
        }
示例#5
0
文件: Image.cs 项目: qq1792/LSharp
        public ImageDebugDirectory GetDebugHeader(out byte[] header)
        {
            var section = GetSectionAtVirtualAddress(Debug.VirtualAddress);
            var buffer = new ByteBuffer(section.Data);
            buffer.position = (int)(Debug.VirtualAddress - section.VirtualAddress);

            var directory = new ImageDebugDirectory
            {
                Characteristics = buffer.ReadInt32(),
                TimeDateStamp = buffer.ReadInt32(),
                MajorVersion = buffer.ReadInt16(),
                MinorVersion = buffer.ReadInt16(),
                Type = buffer.ReadInt32(),
                SizeOfData = buffer.ReadInt32(),
                AddressOfRawData = buffer.ReadInt32(),
                PointerToRawData = buffer.ReadInt32(),
            };

            buffer.position = (int)(directory.PointerToRawData - section.PointerToRawData);

            header = new byte[directory.SizeOfData];
            Buffer.BlockCopy(buffer.buffer, buffer.position, header, 0, header.Length);

            return directory;
        }