예제 #1
0
        public string GetSctionName(ElfSectionHeader section)
        {
            var ni = (int)section.NameIndex;

            if (stringTable.ContainsKey(ni) == false)
            {
                return("");
            }
            return(stringTable[(int)section.NameIndex]);
        }
예제 #2
0
 public void Read(System.IO.Stream stream)
 {
     //read header;
     this.header = new ElfDocumentHeader();
     header.Read(stream);
     //read sectionheaders
     sectionHeaders.Clear();
     for (var i = 0; i < header.Head_SectionHeaderEntryCount; i++)
     {
         long offset = (long)header.Head_SectionHeaderOffset + (long)i * header.Head_SectionHeaderEntrySize;
         stream.Seek(offset, System.IO.SeekOrigin.Begin);
         ElfSectionHeader _header = new ElfSectionHeader();
         _header.Read(stream, header);
         long offsetend = stream.Position;
         var  size      = offsetend - offset;
         if (size != header.Head_SectionHeaderEntrySize)
         {
             throw new Exception("Error Section Read");
         }
         sectionHeaders.Add(_header);
     }
     //read sectiondata
     sectionRaws.Clear();
     for (var i = 0; i < header.Head_SectionHeaderEntryCount; i++)
     {
         byte[] data   = new byte[this.sectionHeaders[i].Size];
         var    offset = (int)this.sectionHeaders[i].Offset;
         stream.Seek(offset, System.IO.SeekOrigin.Begin);
         stream.Read(data, 0, data.Length);
         sectionRaws.Add(data);
     }
     //read segmentheaders
     for (var i = 0; i < header.Head_SegmentHeaderEntryCount; i++)
     {
         long offset = (long)header.Head_SegmentHeaderOffset + (long)i * header.Head_SegmentHeaderEntrySize;
         stream.Seek(offset, System.IO.SeekOrigin.Begin);
         ElfSegmentHeader segment = new ElfSegmentHeader();
         segment.Read(stream, header);
         segments.Add(segment);
     }
     Read_StringTable();
 }