File indexing completed on 2024-05-12 05:43:29

0001 /*
0002     Copyright (C) 2015 Volker Krause <vkrause@kde.org>
0003 
0004     This program is free software; you can redistribute it and/or modify it
0005     under the terms of the GNU Library General Public License as published by
0006     the Free Software Foundation; either version 2 of the License, or (at your
0007     option) any later version.
0008 
0009     This program is distributed in the hope that it will be useful, but WITHOUT
0010     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0011     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
0012     License for more details.
0013 
0014     You should have received a copy of the GNU General Public License
0015     along with this program.  If not, see <https://www.gnu.org/licenses/>.
0016 */
0017 
0018 #include "elfnotesection.h"
0019 #include "elfnoteentry_impl.h"
0020 #include "elffile.h"
0021 
0022 #include <elf.h>
0023 
0024 ElfNoteSection::ElfNoteSection(ElfFile* file, ElfSectionHeader* shdr):
0025     ElfSection(file, shdr)
0026 {
0027     uint64_t offset = 0;
0028     ElfNoteEntry *entry = nullptr;
0029     do {
0030         if (file->type() == ELFCLASS32) {
0031             entry = new ElfNoteEntryImpl<Elf32_Nhdr>(this, offset);
0032         } else {
0033             // ### somehow the note sections in 64bit files are also using Elf32_Nhdr!?
0034 //             entry = new ElfNoteEntryImpl<Elf64_Nhdr>(this, offset);
0035             entry = new ElfNoteEntryImpl<Elf32_Nhdr>(this, offset);
0036         }
0037         m_entries.push_back(entry);
0038         offset += entry->size();
0039     } while(offset < size() && entry->size() > 0);
0040 }
0041 
0042 ElfNoteSection::~ElfNoteSection()
0043 {
0044     qDeleteAll(m_entries);
0045 }
0046 
0047 int ElfNoteSection::entryCount() const
0048 {
0049     return m_entries.size();
0050 }
0051 
0052 ElfNoteEntry* ElfNoteSection::entry(int index) const
0053 {
0054     return m_entries.at(index);
0055 }