Ejemplo n.º 1
0
        /// <summary>
        /// Reads the code view debug data from the specified set of debug directories.
        /// </summary>
        /// <param name="debugDirectories">The set of debug directories.</param>
        /// <param name="endAddress">End Address of the image.</param>
        /// <returns>The code view if found, null otherwise.</returns>
        private CodeViewDebugData GetCodeViewDebugData(DebugDirectory[] debugDirectories, IntPtr endAddress)
        {
            foreach (DebugDirectory debugDirectory in debugDirectories)
            {
                if (debugDirectory.Type != ImageDebugType.CodeView)
                {
                    continue;
                }

                if (debugDirectory.SizeOfData > 1000)
                {
                    return(null);
                }

                BinaryReader reader    = this.ReadAtRelativeVirtualAddress((int)debugDirectory.AddressOfRawData, (int)debugDirectory.SizeOfData);
                int          signature = reader.ReadInt32();
                if (signature != PEImageReader.CodeViewSignature)
                {
                    return(null);
                }

                CodeViewDebugData codeView = new CodeViewDebugData(
                    new Guid(reader.ReadBytes(16)),
                    (int)reader.ReadUInt32(),
                    this.ReadNullTerminatedUTF8String(reader),
                    endAddress);
                return(codeView);
            }

            return(null);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Reads the code view debug data from the specified set of debug directories.
        /// </summary>
        /// <param name="debugDirectories">The set of debug directories.</param>
        /// <param name="endAddress">End Address of the image.</param>
        /// <returns>The code view if found, null otherwise.</returns>
        private CodeViewDebugData GetCodeViewDebugData(DebugDirectory[] debugDirectories, IntPtr endAddress)
        {
            foreach (DebugDirectory debugDirectory in debugDirectories)
            {
                if (debugDirectory.Type != ImageDebugType.CodeView)
                {
                    continue;
                }

                if (debugDirectory.SizeOfData > 1000)
                {
                    return null;
                }

                BinaryReader reader = this.ReadAtRelativeVirtualAddress((int)debugDirectory.AddressOfRawData, (int)debugDirectory.SizeOfData);
                int signature = reader.ReadInt32();
                if (signature != PEImageReader.CodeViewSignature)
                {
                    return null;
                }

                CodeViewDebugData codeView = new CodeViewDebugData(
                                        new Guid(reader.ReadBytes(16)),
                                        (int)reader.ReadUInt32(),
                                        this.ReadNullTerminatedUTF8String(reader),
                                        endAddress);
                return codeView;
            }

            return null;
        }