From 258173915c96746e3261c757e871d7d6c877175b Mon Sep 17 00:00:00 2001 From: jakcron Date: Thu, 30 Sep 2021 19:42:15 +0800 Subject: [PATCH] Port ElfSymbolParser to libtoolchain. --- src/ElfSymbolParser.cpp | 25 +++++++++++++------------ src/ElfSymbolParser.h | 2 +- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/ElfSymbolParser.cpp b/src/ElfSymbolParser.cpp index 8bb66dd..d4dfc3a 100644 --- a/src/ElfSymbolParser.cpp +++ b/src/ElfSymbolParser.cpp @@ -1,8 +1,9 @@ #include "ElfSymbolParser.h" -nstool::ElfSymbolParser::ElfSymbolParser() +nstool::ElfSymbolParser::ElfSymbolParser() : + mModuleName("nstool::ElfSymbolParser"), + mSymbolList() { - mSymbolList.clear(); } void nstool::ElfSymbolParser::operator=(const ElfSymbolParser& other) @@ -22,7 +23,7 @@ bool nstool::ElfSymbolParser::operator!=(const ElfSymbolParser& other) const void nstool::ElfSymbolParser::parseData(const byte_t *dyn_sym, size_t dyn_sym_size, const byte_t *dyn_str, size_t dyn_str_size, bool is64Bit) { - size_t dynSymSize = is64Bit ? sizeof(fnd::Elf64_Sym) : sizeof(fnd::Elf32_Sym); + size_t dynSymSize = is64Bit ? sizeof(Elf64_Sym) : sizeof(Elf32_Sym); sElfSymbol symbol; for (size_t i = 0; i < dyn_sym_size; i += dynSymSize) @@ -31,22 +32,22 @@ void nstool::ElfSymbolParser::parseData(const byte_t *dyn_sym, size_t dyn_sym_si if (is64Bit) { - name_pos = le_word(((fnd::Elf64_Sym*)(dyn_sym + i))->st_name); - symbol.shn_index = le_hword(((fnd::Elf64_Sym*)(dyn_sym + i))->st_shndx); - symbol.symbol_type = fnd::elf::get_elf_st_type(((fnd::Elf64_Sym*)(dyn_sym + i))->st_info); - symbol.symbol_binding = fnd::elf::get_elf_st_bind(((fnd::Elf64_Sym*)(dyn_sym + i))->st_info); + name_pos = tc::bn::detail::__le_uint32(((Elf64_Sym*)(dyn_sym + i))->st_name); + symbol.shn_index = tc::bn::detail::__le_uint16(((Elf64_Sym*)(dyn_sym + i))->st_shndx); + symbol.symbol_type = elf::get_elf_st_type(((Elf64_Sym*)(dyn_sym + i))->st_info); + symbol.symbol_binding = elf::get_elf_st_bind(((Elf64_Sym*)(dyn_sym + i))->st_info); } else { - name_pos = le_word(((fnd::Elf32_Sym*)(dyn_sym + i))->st_name); - symbol.shn_index = le_hword(((fnd::Elf32_Sym*)(dyn_sym + i))->st_shndx); - symbol.symbol_type = fnd::elf::get_elf_st_type(((fnd::Elf32_Sym*)(dyn_sym + i))->st_info); - symbol.symbol_binding = fnd::elf::get_elf_st_bind(((fnd::Elf32_Sym*)(dyn_sym + i))->st_info); + name_pos = tc::bn::detail::__le_uint32(((Elf32_Sym*)(dyn_sym + i))->st_name); + symbol.shn_index = tc::bn::detail::__le_uint16(((Elf32_Sym*)(dyn_sym + i))->st_shndx); + symbol.symbol_type = elf::get_elf_st_type(((Elf32_Sym*)(dyn_sym + i))->st_info); + symbol.symbol_binding = elf::get_elf_st_bind(((Elf32_Sym*)(dyn_sym + i))->st_info); } if (name_pos >= dyn_str_size) { - throw tc::Exception(kModuleName, "Out of bounds symbol name offset"); + throw tc::Exception(mModuleName, "Out of bounds symbol name offset"); } //for (; dyn_str[name_pos] == 0x00 && name_pos < dyn_str_size; name_pos++); diff --git a/src/ElfSymbolParser.h b/src/ElfSymbolParser.h index ea8bedb..f2ad56d 100644 --- a/src/ElfSymbolParser.h +++ b/src/ElfSymbolParser.h @@ -43,7 +43,7 @@ public: const std::vector& getSymbolList() const; private: - const std::string kModuleName = "ElfSymbolParser"; + std::string mModuleName; // data std::vector mSymbolList;