diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-04-26 12:05:01 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-04-26 12:05:01 +0200 |
| commit | 78e6fbcf07336fc33817b561c7b3cd0ed821d0b4 (patch) | |
| tree | a233bc29061ba721261b4371f47f3735c4141037 /src | |
| parent | 0403b684c43418b9ad4a67d86a94d0b8f567ac1a (diff) | |
| download | box64-78e6fbcf07336fc33817b561c7b3cd0ed821d0b4.tar.gz box64-78e6fbcf07336fc33817b561c7b3cd0ed821d0b4.zip | |
Some fixes to ehframe stack unwinding
Diffstat (limited to 'src')
| -rw-r--r-- | src/elfs/elfdwarf_private.c | 8 |
1 files changed, 4 insertions, 4 deletions
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) |