diff --git a/include/ehp.hpp b/include/ehp.hpp
index 4301bb1e839d6ced3c63174437f9a2bab3f1e613..0dd31dd50b255d8239d715414bda7c97fecfe6dc 100644
--- a/include/ehp.hpp
+++ b/include/ehp.hpp
@@ -147,6 +147,7 @@ class EHFrameParser_t
 	virtual void print() const=0;
 	virtual const shared_ptr<FDEVector_t> getFDEs() const =0;
 	virtual const shared_ptr<CIEVector_t> getCIEs() const =0;
+	virtual const shared_ptr<FDEContents_t> findFDE(uint64_t addr) const =0; 
 
 	static unique_ptr<const EHFrameParser_t> factory(const string filename);
 	static unique_ptr<const EHFrameParser_t> factory(
diff --git a/src/ehp.cpp b/src/ehp.cpp
index ddb1ac73ed8200fa591a1487e40f7d9c710b4595..2961e3b9b344bd376daff5125d0d556a0229e82c 100644
--- a/src/ehp.cpp
+++ b/src/ehp.cpp
@@ -1675,8 +1675,16 @@ const shared_ptr<CIEVector_t>  split_eh_frame_impl_t<ptrsize>::getCIEs() const
 		[](const cie_contents_t<ptrsize> &a){ return shared_ptr<CIEContents_t>(new cie_contents_t<ptrsize>(a));});
 	return ret;
 }
-	
 
+template <int ptrsize>
+const shared_ptr<FDEContents_t> split_eh_frame_impl_t<ptrsize>::findFDE(uint64_t addr) const
+{
+
+        const auto tofind=fde_contents_t<ptrsize>( addr, addr+1);
+        const auto fde_it=fdes.find(tofind);
+	const auto raw_ret_ptr = (fde_it==fdes.end()) ?  nullptr : new fde_contents_t<ptrsize>(*fde_it);
+	return shared_ptr<FDEContents_t>(raw_ret_ptr);
+}
 
 unique_ptr<const EHFrameParser_t> EHFrameParser_t::factory(const string filename)
 {
diff --git a/src/ehp_priv.hpp b/src/ehp_priv.hpp
index e6bc9228c44d942fa4d197cd831d4a38f750aaf6..1f6c53d1bf812a5305c692dbf7d628f565a7a8d6 100644
--- a/src/ehp_priv.hpp
+++ b/src/ehp_priv.hpp
@@ -403,6 +403,8 @@ class split_eh_frame_impl_t : public EHFrameParser_t
 
         virtual const shared_ptr<FDEVector_t> getFDEs() const;
         virtual const shared_ptr<CIEVector_t> getCIEs() const;
+        virtual const shared_ptr<FDEContents_t> findFDE(uint64_t addr) const; 
+
 
 
 };