From 3fec6df0cf5375e6946d04215796fc2e298da1b4 Mon Sep 17 00:00:00 2001 From: Jason Hiser <jdhiser@gmail.com> Date: Sun, 27 Jan 2019 14:16:24 -0500 Subject: [PATCH] updated libEXE to return file type from elfio, and added new API calls for libIRDB-core Former-commit-id: c9e7222c45a17e84319b68df829e4616882adbf4 --- libEXEIO/include/exeio.h | 1 + libEXEIO/src/exeio_elf.h | 1 + libEXEIO/src/exeio_pe.h | 1 + libIRDB/include/core/eh.hpp | 3 +++ libIRDB/include/core/fileir.hpp | 4 ++++ libIRDB/src/core/fileir.cpp | 10 ++++++++++ 6 files changed, 20 insertions(+) diff --git a/libEXEIO/include/exeio.h b/libEXEIO/include/exeio.h index b434d90f2..f27c8556d 100644 --- a/libEXEIO/include/exeio.h +++ b/libEXEIO/include/exeio.h @@ -32,6 +32,7 @@ namespace EXEIO virtual const char* get_data() const =0; virtual std::string get_name() const =0; virtual int get_size() const =0; + virtual int get_type() const =0; virtual EXEIO::virtual_offset_t get_address() const =0; virtual bool mightContainStrings() const =0; }; diff --git a/libEXEIO/src/exeio_elf.h b/libEXEIO/src/exeio_elf.h index 6b2ae5a6e..cd2230b75 100644 --- a/libEXEIO/src/exeio_elf.h +++ b/libEXEIO/src/exeio_elf.h @@ -31,6 +31,7 @@ namespace EXEIO const char* get_data() const { return s->get_data(); } std::string get_name() const { return s->get_name(); } int get_size() const { return s->get_size(); } + int get_type() const { return s->get_type(); } EXEIO::virtual_offset_t get_address() const { return s->get_address(); } bool mightContainStrings() const { assert(0); } diff --git a/libEXEIO/src/exeio_pe.h b/libEXEIO/src/exeio_pe.h index f4ab2eff6..868ddeec9 100644 --- a/libEXEIO/src/exeio_pe.h +++ b/libEXEIO/src/exeio_pe.h @@ -32,6 +32,7 @@ namespace EXEIO const char* get_data() const { return s->get_raw_data().c_str(); } std::string get_name() const { return s->get_name(); } int get_size() const { return s->get_virtual_size(); } + int get_type() const { assert(0); } // not imp'd yet EXEIO::virtual_offset_t get_address() const { EXEIO::virtual_offset_t base = b->get_image_base_64(); return base + s->get_virtual_address(); diff --git a/libIRDB/include/core/eh.hpp b/libIRDB/include/core/eh.hpp index 96068ab1f..77082ae52 100644 --- a/libIRDB/include/core/eh.hpp +++ b/libIRDB/include/core/eh.hpp @@ -65,6 +65,9 @@ class EhProgram_t : public BaseObj_t, virtual public IRDB_SDK::EhProgram_t EhProgramListing_t& GetFDEProgram() { return fde_program; } const EhProgramListing_t& getFDEProgram() const { return fde_program; } + void setCIEProgram(const EhProgramListing_t& p) { cie_program=p; } + void setFDEProgram(const EhProgramListing_t& p) { fde_program=p; } + uint64_t getCodeAlignmentFactor() const { return code_alignment_factor; } void setCodeAlignmentFactor(const uint64_t caf) diff --git a/libIRDB/include/core/fileir.hpp b/libIRDB/include/core/fileir.hpp index 65b9b2929..17b9a9c5f 100644 --- a/libIRDB/include/core/fileir.hpp +++ b/libIRDB/include/core/fileir.hpp @@ -143,6 +143,10 @@ class FileIR_t : public BaseObj_t, virtual public IRDB_SDK::FileIR_t virtual void removeScoop(IRDB_SDK::DataScoop_t* s) ; virtual void moveRelocation(IRDB_SDK::Relocation_t* reloc, IRDB_SDK::Instruction_t* from, IRDB_SDK::Instruction_t* to) ; + virtual IRDB_SDK::EhProgram_t* copyEhProgram(const IRDB_SDK::EhProgram_t& orig); + + virtual void setAllEhPrograms(const EhProgramSet_t& new_pgms) { eh_pgms=new_pgms; } + diff --git a/libIRDB/src/core/fileir.cpp b/libIRDB/src/core/fileir.cpp index 6a743b336..ccdc2d5d0 100644 --- a/libIRDB/src/core/fileir.cpp +++ b/libIRDB/src/core/fileir.cpp @@ -1887,4 +1887,14 @@ IRDB_SDK::DataScoop_t* FileIR_t::addNewDataScoop( return newscoop; } +IRDB_SDK::EhProgram_t* FileIR_t::copyEhProgram(const IRDB_SDK::EhProgram_t& orig) +{ + const auto ehpgm=dynamic_cast<const libIRDB::EhProgram_t*>(&orig); + assert(ehpgm); + auto new_eh_pgm=new libIRDB::EhProgram_t(*ehpgm); + GetAllEhPrograms().insert(new_eh_pgm); + return new_eh_pgm; +} + + -- GitLab