Beispiel #1
0
        public bool ProcessDebugHeader(ImageDebugHeader header)
        {
            if (image == module.Image)
            {
                return(true);
            }
            ImageDebugHeaderEntry codeViewEntry = header.GetCodeViewEntry();

            if (codeViewEntry == null)
            {
                return(false);
            }
            byte[] data = codeViewEntry.Data;
            if (data.Length < 24)
            {
                return(false);
            }
            if (ReadInt32(data, 0) != 1396986706)
            {
                return(false);
            }
            byte[] array = new byte[16];
            Buffer.BlockCopy(data, 4, array, 0, 16);
            Guid a = new Guid(array);

            Buffer.BlockCopy(image.PdbHeap.Id, 0, array, 0, 16);
            Guid b = new Guid(array);

            if (a != b)
            {
                return(false);
            }
            ReadModule();
            return(true);
        }
Beispiel #2
0
        public bool ProcessDebugHeader(ImageDebugHeader header)
        {
            if (image == module.Image)
            {
                return(true);
            }

            var entry = header.GetCodeViewEntry();

            if (entry == null)
            {
                return(false);
            }

            var data = entry.Data;

            if (data.Length < 24)
            {
                return(false);
            }

            var magic = ReadInt32(data, 0);

            if (magic != 0x53445352)
            {
                return(false);
            }

            var buffer = new byte [16];

            Buffer.BlockCopy(data, 4, buffer, 0, 16);

            var module_guid = new Guid(buffer);

            Buffer.BlockCopy(image.PdbHeap.Id, 0, buffer, 0, 16);

            var pdb_guid = new Guid(buffer);

            if (module_guid != pdb_guid)
            {
                return(false);
            }

            ReadModule();
            return(true);
        }
Beispiel #3
0
        public bool ProcessDebugHeader(ImageDebugHeader header)
        {
            if (image == module.Image)
            {
                return(true);
            }

            foreach (var entry in header.Entries)
            {
                if (!IsMatchingEntry(image.PdbHeap, entry))
                {
                    continue;
                }

                ReadModule();
                return(true);
            }

            return(false);
        }
Beispiel #4
0
        public ImageDebugHeader GetDebugHeader()
        {
            ImageDebugHeader pdbDebugHeader = writer.GetDebugHeader();

            var directory = new ImageDebugDirectory {
                Type         = ImageDebugType.EmbeddedPortablePdb,
                MajorVersion = 0x0100,
                MinorVersion = 0x0100,
            };

            var data = new MemoryStream();

            var w = new BinaryStreamWriter(data);

            w.WriteByte(0x4d);
            w.WriteByte(0x50);
            w.WriteByte(0x44);
            w.WriteByte(0x42);

            w.WriteInt32((int)stream.Length);

            stream.Position = 0;

            using (var compress_stream = new DeflateStream(data, CompressionMode.Compress, leaveOpen: true))
                stream.CopyTo(compress_stream);

            directory.SizeOfData = (int)data.Length;

            var debugHeaderEntries = new ImageDebugHeaderEntry [pdbDebugHeader.Entries.Length + 1];

            for (int i = 0; i < pdbDebugHeader.Entries.Length; i++)
            {
                debugHeaderEntries [i] = pdbDebugHeader.Entries [i];
            }
            debugHeaderEntries [debugHeaderEntries.Length - 1] = new ImageDebugHeaderEntry(directory, data.ToArray());

            return(new ImageDebugHeader(debugHeaderEntries));
        }
Beispiel #5
0
 public bool ProcessDebugHeader(ImageDebugHeader header)
 {
     return(reader.ProcessDebugHeader(header));
 }