Exemplo n.º 1
0
        public void AppendTo(StringBuilder builder)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            const SegmentFlags terminalMask = SegmentFlags.IsTerminal | SegmentFlags.IsBaseTerminal;

            if ((_flags & terminalMask) != 0)
            {
                builder.Append(Name);
            }
            else if ((_flags & SegmentFlags.IsInitial) != 0)
            {
                builder.Append('<');
                builder.Append(Name);
                builder.Append("'>");
            }
            else
            {
                builder.Append('<');
                builder.Append(Name);
                builder.Append('>');
            }

            if ((_flags & SegmentFlags.Optional) != 0)
            {
                builder.Append('?');
            }
        }
Exemplo n.º 2
0
 public void Read(FileStream f)
 {
     offset          = f.ReadUInt16();
     lengthBytes     = f.ReadUInt16();
     flags           = (SegmentFlags)f.ReadUInt16();
     allocationBytes = f.ReadUInt16();
 }
Exemplo n.º 3
0
        Segment(string name, SegmentFlags flags)
        {
            if (name == null)
            {
                throw new ArgumentNullException(nameof(name));
            }

            Name   = name;
            _flags = flags;
        }
Exemplo n.º 4
0
        public ProgramHeader(Header parent, EndianBinaryReader reader, short programHeaderSize)
        {
            Parent               = parent;
            Type                 = (SegmentType)reader.ReadInt32();
            ImageOffset          = reader.ReadInt32();
            InMemVirtualAddress  = reader.ReadUInt32();
            InMemPhysicalAddress = reader.ReadUInt32();
            SegmentImageSize     = reader.ReadInt32();
            SegmentInMemSize     = reader.ReadInt32();
            Flags                = (SegmentFlags)reader.ReadUInt32();
            Alignment            = reader.ReadUInt32();

            var currentPosition = reader.BaseStream.Position;

            reader.Seek(ImageOffset, SeekOrigin.Begin);
            Data = reader.ReadBytes(SegmentImageSize);
            reader.BaseStream.Seek(currentPosition, SeekOrigin.Begin);
        }
Exemplo n.º 5
0
 /// <summary>
 /// If the segment has the specified flag set, return true.
 /// </summary>
 /// <param name="segment"></param>
 /// <param name="flag"></param>
 /// <returns></returns>
 public static bool SegmentFlagIsSet(ArchiveTranscoderJobSegment segment, SegmentFlags flag)
 {
     if (segment != null)
     {
         if (segment.Flags != null)
         {
             foreach (string s in segment.Flags)
             {
                 if (s != null)
                 {
                     if (Enum.GetName(typeof(SegmentFlags), flag).ToLower() == s.Trim().ToLower())
                     {
                         return(true);
                     }
                 }
             }
         }
     }
     return(false);
 }
Exemplo n.º 6
0
        public void Read(System.IO.Stream stream, ElfDocumentHeader header)
        {
            Type = (SegmentType)stream.ReadUInt32(header);

            if (header.Head_Is64Bit)
            {
                Flags = (SegmentFlags)stream.ReadUInt32(header);
            }
            // TODO: some functions?s
            Offset          = stream.ReadUIntPtr(header);
            Address         = stream.ReadUIntPtr(header);
            PhysicalAddress = stream.ReadUIntPtr(header);
            FileSize        = stream.ReadUIntPtr(header);
            Size            = stream.ReadUIntPtr(header);
            if (!header.Head_Is64Bit)
            {
                Flags = (SegmentFlags)stream.ReadUInt32(header);
            }

            Alignment = stream.ReadUIntPtr(header);
        }
Exemplo n.º 7
0
 private void ReadHeader()
 {
     using (var reader = ObtainReader(headerOffset))
     {
         Type = (SegmentType)reader.ReadUInt32();
         if (elfClass == Class.Bit64)
         {
             Flags = (SegmentFlags)reader.ReadUInt32();
         }
         // TODO: some functions?s
         Offset          = elfClass == Class.Bit32 ? reader.ReadUInt32() : reader.ReadInt64();
         Address         = (elfClass == Class.Bit32 ? reader.ReadUInt32() : reader.ReadUInt64()).To <T>();
         PhysicalAddress = (elfClass == Class.Bit32 ? reader.ReadUInt32() : reader.ReadUInt64()).To <T>();
         FileSize        = elfClass == Class.Bit32 ? reader.ReadInt32() : reader.ReadInt64();
         Size            = (elfClass == Class.Bit32 ? reader.ReadUInt32() : reader.ReadUInt64()).To <T>();
         if (elfClass == Class.Bit32)
         {
             Flags = (SegmentFlags)reader.ReadUInt32();
         }
         Alignment = (elfClass == Class.Bit32 ? reader.ReadUInt32() : reader.ReadUInt64()).To <T>();
     }
 }
Exemplo n.º 8
0
        /// <summary>
        /// Add the specified flag to segment flags.  If the flag is already set, do nothing.
        /// </summary>
        /// <param name="segment"></param>
        /// <param name="flag"></param>
        public static void SetSegmentFlag(ArchiveTranscoderJobSegment segment, SegmentFlags flag)
        {
            if (segment != null)
            {
                if (segment.Flags == null)
                {
                    segment.Flags    = new String[1];
                    segment.Flags[0] = Enum.GetName(typeof(SegmentFlags), flag);
                }
                else
                {
                    if (SegmentFlagIsSet(segment, flag))
                    {
                        return;
                    }

                    String[] newFlags = new String[segment.Flags.Length + 1];
                    segment.Flags.CopyTo(newFlags, 0);
                    newFlags[newFlags.Length - 1] = Enum.GetName(typeof(SegmentFlags), flag);
                    segment.Flags = newFlags;
                }
            }
        }