int GetSectionHeaderEntryNum(FileInterface elf)
 {
     if (GetElfBitWidth(elf) == 32)
     {
         return(BitConverter.ToUInt16(elf.PeekBytes(0x30, 2).Reverse().ToArray(), 0));
     }
     else //assume it's 64-bit
     {
         return(BitConverter.ToUInt16(elf.PeekBytes(0x3C, 2).Reverse().ToArray(), 0));
     }
 }
 long GetSectionHeaderTableOffset(FileInterface elf)
 {
     if (GetElfBitWidth(elf) == 32)
     {
         return(BitConverter.ToUInt32(elf.PeekBytes(0x20, 4).Reverse().ToArray(), 0));
     }
     else //assume it's 64-bit
     {
         return((long)BitConverter.ToUInt64(elf.PeekBytes(0x28, 8).Reverse().ToArray(), 0));
     }
 }
 long GetSectionSegmentSize(FileInterface elf, int segment)
 {
     if (GetElfBitWidth(elf) == 32)
     {
         long headeroffset = GetSectionHeaderTableOffset(elf) + (0x28 * Convert.ToInt64(segment));
         return(BitConverter.ToUInt32(elf.PeekBytes(Convert.ToInt64(headeroffset) + 0x14, 4).Reverse().ToArray(), 0));
     }
     else
     {
         long headeroffset = GetSectionHeaderTableOffset(elf) + (0x40 * Convert.ToInt64(segment));
         return((long)BitConverter.ToUInt64(elf.PeekBytes(Convert.ToInt64(headeroffset) + 0x20, 8).Reverse().ToArray(), 0));
     }
 }
 long GetShstrOffset(FileInterface elf)
 {
     if (GetElfBitWidth(elf) == 32)
     {
         int segmentindex = BitConverter.ToUInt16(elf.PeekBytes(0x32, 2).Reverse().ToArray(), 0);
         return(BitConverter.ToUInt32(elf.PeekBytes(GetSectionHeaderTableOffset(elf) + (0x28 * Convert.ToInt64(segmentindex)) + 10, 4).Reverse().ToArray(), 0));
     }
     else
     {
         int segmentindex = BitConverter.ToUInt16(elf.PeekBytes(0x3E, 2).Reverse().ToArray(), 0);
         return((long)BitConverter.ToUInt64(elf.PeekBytes(GetSectionHeaderTableOffset(elf) + (0x40 * Convert.ToInt64(segmentindex)) + 10, 8).Reverse().ToArray(), 0));
     }
 }
 long GetProgramSegmentOffset(FileInterface elf, int segment)
 {
     if (GetElfBitWidth(elf) == 32)
     {
         long headeroffset = GetProgramHeaderTableOffset(elf) + (0x20 * Convert.ToInt64(segment));
         return(BitConverter.ToUInt32(elf.PeekBytes(Convert.ToInt64(headeroffset) + 0x04, 4).Reverse().ToArray(), 0));
     }
     else
     {
         long headeroffset = GetProgramHeaderTableOffset(elf) + (0x38 * Convert.ToInt64(segment));
         return((long)BitConverter.ToUInt64(elf.PeekBytes(Convert.ToInt64(headeroffset) + 0x08, 8).Reverse().ToArray(), 0));
     }
 }
 string GetSectionSegmentName(FileInterface elf, int segment)
 {
     if (GetElfBitWidth(elf) == 32)
     {
         long headeroffset = GetSectionHeaderTableOffset(elf) + (0x28 * Convert.ToInt64(segment));
         long stroffset    = BitConverter.ToUInt32(elf.PeekBytes(headeroffset, 4).Reverse().ToArray(), 0);
         if (GetShstrOffset(elf) == 0)
         {
             return(" ");
         }
         return(System.Text.Encoding.ASCII.GetString(elf.PeekBytes(GetShstrOffset(elf) + stroffset, 8)));
     }
     else
     {
         long headeroffset = GetSectionHeaderTableOffset(elf) + (0x40 * Convert.ToInt64(segment));
         long stroffset    = (long)BitConverter.ToUInt64(elf.PeekBytes(headeroffset, 8).Reverse().ToArray(), 0);
         if (GetShstrOffset(elf) == 0)
         {
             return(" ");
         }
         return(System.Text.Encoding.ASCII.GetString(elf.PeekBytes(GetShstrOffset(elf) + stroffset, 8)));
     }
 }