From 299ef4e98dc695187736a14b87ec4987ba29643f Mon Sep 17 00:00:00 2001 From: strange Date: Fri, 18 Dec 2009 23:31:50 -0700 Subject: [PATCH] Added a section lookup-by-name function. Now, the real work begins -- the DWARF parser . . . the ELF parser now gets the data for the DWARF parser to parse. --- src/interface/CMakeLists.txt | 2 +- src/interface/Initializer.cpp | 2 +- src/interface/ProgramManager.cpp | 1 + src/interface/ProgramManager.h | 2 ++ src/interface/dwarf/Parser.h | 8 ++++++++ src/interface/elf/Header.cpp | 1 - src/interface/elf/Parser.cpp | 9 +++++++-- src/interface/elf/Parser.h | 2 ++ src/interface/elf/Section.cpp | 1 - 9 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/interface/CMakeLists.txt b/src/interface/CMakeLists.txt index 6445dea..1084771 100644 --- a/src/interface/CMakeLists.txt +++ b/src/interface/CMakeLists.txt @@ -2,7 +2,7 @@ aux_source_directory(. SOURCES) aux_source_directory(dwarf DWARF_SOURCES) aux_source_directory(elf ELF_SOURCES) -include_directories(..) +include_directories(. ..) link_directories(..) add_executable(aesalon ${SOURCES} ${ELF_SOURCES} ${DWARF_SOURCES}) diff --git a/src/interface/Initializer.cpp b/src/interface/Initializer.cpp index 8a1a3ad..f5c3a1a 100644 --- a/src/interface/Initializer.cpp +++ b/src/interface/Initializer.cpp @@ -86,7 +86,7 @@ void Initializer::usage() { } void Initializer::run() { - /*program_manager->execute();*/ + program_manager->execute(); while(program_manager->is_running()) { program_manager->wait(); program_manager->handle(); diff --git a/src/interface/ProgramManager.cpp b/src/interface/ProgramManager.cpp index aa99413..cbbd7ac 100644 --- a/src/interface/ProgramManager.cpp +++ b/src/interface/ProgramManager.cpp @@ -8,6 +8,7 @@ ProgramManager::ProgramManager(Misc::SmartPointer argume : bi_pipe(NULL), argument_list(argument_list), running(false) { elf_parser = new ELF::Parser(argument_list->get_argument(0)); + dwarf_parser = new DWARF::Parser(elf_parser); } void ProgramManager::execute() { diff --git a/src/interface/ProgramManager.h b/src/interface/ProgramManager.h index e3e86c5..2019a8e 100644 --- a/src/interface/ProgramManager.h +++ b/src/interface/ProgramManager.h @@ -6,6 +6,7 @@ #include "platform/ArgumentList.h" #include "PTracePortal.h" #include "elf/Parser.h" +#include "dwarf/Parser.h" namespace Aesalon { namespace Interface { @@ -20,6 +21,7 @@ private: Misc::SmartPointer ptrace_portal; Misc::SmartPointer elf_parser; + Misc::SmartPointer dwarf_parser; public: ProgramManager(Misc::SmartPointer argument_list); virtual ~ProgramManager() {} diff --git a/src/interface/dwarf/Parser.h b/src/interface/dwarf/Parser.h index 13bb52a..f1a0d35 100644 --- a/src/interface/dwarf/Parser.h +++ b/src/interface/dwarf/Parser.h @@ -1,12 +1,20 @@ #ifndef AESALON_INTERFACE_DWARF_PARSER_H #define AESALON_INTERFACE_DWARF_PARSER_H +#include "elf/Parser.h" + +#include "misc/SmartPointer.h" + namespace Aesalon { namespace Interface { namespace DWARF { class Parser { +private: + Misc::SmartPointer elf_parser; public: + Parser(Misc::SmartPointer elf_parser) : elf_parser(elf_parser) {} + virtual ~Parser() {} }; } // namespace DWARF diff --git a/src/interface/elf/Header.cpp b/src/interface/elf/Header.cpp index db43921..0038211 100644 --- a/src/interface/elf/Header.cpp +++ b/src/interface/elf/Header.cpp @@ -28,7 +28,6 @@ Header::Header(int file_fd) { #elif AESALON_PLATFORM == AESALON_PLATFORM_x86 if(data.e_ident[EI_CLASS] != ELFCLASS32) throw ParserException("ELF file type is not ELFCLASS32"); #endif - std::cout << "ELF::Header::Header(): ELF header parsed successfully" << std::endl; } } // namespace ELF diff --git a/src/interface/elf/Parser.cpp b/src/interface/elf/Parser.cpp index 59949a2..bbb7bb2 100644 --- a/src/interface/elf/Parser.cpp +++ b/src/interface/elf/Parser.cpp @@ -29,13 +29,18 @@ Parser::Parser(std::string filename) : filename(filename) { char *p = string_table->get_content(); p = p + (*i)->get_name_offset(); (*i)->set_name(p); - std::cout << "ELF::Parser::Parser(): Setting name of section to \"" << p << "\", offset is: " << (*i)->get_name_offset() << "\n"; - if((*i)->is_string_table()) std::cout << "\t^^ is string table" << std::endl; } close(file_fd); } +Misc::SmartPointer
Parser::get_section(std::string name) const { + for(section_list_t::const_iterator i = section_list.begin(); i != section_list.end(); i ++) { + if((*i)->get_name() == name) return *i; + } + return NULL; +} + } // namespace ELF } // namespace Interface } // namespace Aesalon diff --git a/src/interface/elf/Parser.h b/src/interface/elf/Parser.h index 624392e..0a47cd0 100644 --- a/src/interface/elf/Parser.h +++ b/src/interface/elf/Parser.h @@ -36,6 +36,8 @@ private: public: Parser(std::string filename); virtual ~Parser() {} + + Misc::SmartPointer
get_section(std::string name) const; }; } // namespace ELF diff --git a/src/interface/elf/Section.cpp b/src/interface/elf/Section.cpp index 55a7376..2d2d4d2 100644 --- a/src/interface/elf/Section.cpp +++ b/src/interface/elf/Section.cpp @@ -15,7 +15,6 @@ Section::Section(int file_fd) : file_fd(file_fd) { } void Section::read_content() { - std::cout << "Section::read_content(): data.sh_addr is: " << data.sh_offset << std::endl; lseek(file_fd, data.sh_offset, SEEK_SET); content = new char[data.sh_size]; std::size_t bytes = read(file_fd, content, data.sh_size); -- 2.11.4.GIT