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('?'); } }
public void Read(FileStream f) { offset = f.ReadUInt16(); lengthBytes = f.ReadUInt16(); flags = (SegmentFlags)f.ReadUInt16(); allocationBytes = f.ReadUInt16(); }
Segment(string name, SegmentFlags flags) { if (name == null) { throw new ArgumentNullException(nameof(name)); } Name = name; _flags = flags; }
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); }
/// <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); }
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); }
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>(); } }
/// <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; } } }