about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/elfs/elfdwarf_private.c4
-rwxr-xr-xsrc/elfs/elfloader.c2
-rwxr-xr-xsrc/include/elfloader.h2
3 files changed, 6 insertions, 2 deletions
diff --git a/src/elfs/elfdwarf_private.c b/src/elfs/elfdwarf_private.c
index bae2b4ea..84ee71dd 100644
--- a/src/elfs/elfdwarf_private.c
+++ b/src/elfs/elfdwarf_private.c
@@ -108,6 +108,10 @@ uintptr_t get_parent_registers(dwarf_unwind_t *unwind, const elfheader_t *ehdr,
         *success = 0;
         return 0;
     }
+    if(!IsAddressInElfSpace(ehdr, ehdr->ehframehdr)) {
+        *success = 0;
+        return 0;
+    }
     unsigned char ehfh_version = *(unsigned char*)ehdr->ehframehdr;
     if (ehfh_version != 1) {
         *success = 0;
diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c
index 338a57ca..3bbd2206 100755
--- a/src/elfs/elfloader.c
+++ b/src/elfs/elfloader.c
@@ -1258,7 +1258,7 @@ uint32_t GetBaseSize(elfheader_t* h)
     return h->memsz;
 }
 
-int IsAddressInElfSpace(elfheader_t* h, uintptr_t addr)
+int IsAddressInElfSpace(const elfheader_t* h, uintptr_t addr)
 {
     if(!h)
         return 0;
diff --git a/src/include/elfloader.h b/src/include/elfloader.h
index 86efe061..2cb90df4 100755
--- a/src/include/elfloader.h
+++ b/src/include/elfloader.h
@@ -40,7 +40,7 @@ void RunDeferedElfInit(x64emu_t *emu);
 void* GetBaseAddress(elfheader_t* h);
 void* GetElfDelta(elfheader_t* h);
 uint32_t GetBaseSize(elfheader_t* h);
-int IsAddressInElfSpace(elfheader_t* h, uintptr_t addr);
+int IsAddressInElfSpace(const elfheader_t* h, uintptr_t addr);
 elfheader_t* FindElfAddress(box64context_t *context, uintptr_t addr);
 const char* FindNearestSymbolName(elfheader_t* h, void* p, uintptr_t* start, uint64_t* sz);
 int32_t GetTLSBase(elfheader_t* h);