diff --git a/libEXEIO/include/exeio.h b/libEXEIO/include/exeio.h index b434d90f2a6e855899ca1967f8d20e77c2568b6a..f27c8556d7af114c2759766074643f751156ea5d 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 6b2ae5a6e90154a7d3ba9bb48d14475603e85f84..cd2230b757b674a77aff6ab723d9ccdd1327a76d 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 f4ab2eff6d92b9939eb18d046b4ab03e3c2c7d0f..868ddeec9e26f2bd578b7e81b12130baa2394b3f 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 96068ab1f567dd5cce1d4c87cd97a8acfb19a67b..77082ae522f1dcafd68ba4080ec539266f9f1f17 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 65b9b2929998d59772a25b1ea9d641703cea748d..17b9a9c5fb4d0c753cbbcd1881ac26da57fd8e02 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 6a743b336322d65d829c6fc24b4427a54efcc3b4..ccdc2d5d0a22a9b7184dc81411d65121f4f5c7df 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; +} + +