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