From 78e6fbcf07336fc33817b561c7b3cd0ed821d0b4 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Wed, 26 Apr 2023 12:05:01 +0200 Subject: Some fixes to ehframe stack unwinding --- src/elfs/elfdwarf_private.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/elfs/elfdwarf_private.c b/src/elfs/elfdwarf_private.c index 47c0822a..90316a34 100644 --- a/src/elfs/elfdwarf_private.c +++ b/src/elfs/elfdwarf_private.c @@ -108,11 +108,11 @@ uintptr_t get_parent_registers(dwarf_unwind_t *unwind, const elfheader_t *ehdr, *success = 0; return 0; } - if(!IsAddressInElfSpace(ehdr, ehdr->ehframehdr)) { + if(!IsAddressInElfSpace(ehdr, ehdr->ehframehdr+ehdr->delta)) { *success = 0; return 0; } - unsigned char ehfh_version = *(unsigned char*)ehdr->ehframehdr; + unsigned char ehfh_version = *(unsigned char*)(ehdr->ehframehdr+ehdr->delta); if (ehfh_version != 1) { *success = 0; return 0; @@ -122,8 +122,8 @@ uintptr_t get_parent_registers(dwarf_unwind_t *unwind, const elfheader_t *ehdr, // Not using the binary search table (for now) - unsigned char *cur_addr = (unsigned char*)ehdr->ehframe; - unsigned char *end_addr = (unsigned char*)ehdr->ehframe_end; + unsigned char *cur_addr = (unsigned char*)(ehdr->ehframe+ehdr->delta); + unsigned char *end_addr = (unsigned char*)(ehdr->ehframe_end+ehdr->delta); #define AUG_EHDATA (1 << 0) #define AUG_AUGDATA (1 << 1) -- cgit 1.4.1