diff options
| author | rajdakin <rajdakin@gmail.com> | 2022-02-14 13:13:12 +0100 |
|---|---|---|
| committer | rajdakin <rajdakin@gmail.com> | 2022-02-14 13:13:12 +0100 |
| commit | 77925f264fbb60d67fb83e9f2d7d27f5898f7982 (patch) | |
| tree | 655d59df7b98083499875594603b887fb43e13a5 /src/elfs/elfparser.c | |
| parent | 97857d55a02c41ab3b34f9c811ebd7b82f9a1894 (diff) | |
| download | box64-77925f264fbb60d67fb83e9f2d7d27f5898f7982.tar.gz box64-77925f264fbb60d67fb83e9f2d7d27f5898f7982.zip | |
Fixed the backtrace wrapper (uses eh_frame information only)
Diffstat (limited to 'src/elfs/elfparser.c')
| -rwxr-xr-x | src/elfs/elfparser.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/elfs/elfparser.c b/src/elfs/elfparser.c index 07599df6..c92d7e4c 100755 --- a/src/elfs/elfparser.c +++ b/src/elfs/elfparser.c @@ -349,6 +349,17 @@ elfheader_t* ParseElfHeader(FILE* f, const char* name, int exec) h->textsz = h->SHEntries[ii].sh_size; printf_log(LOG_DEBUG, "The .text is at address %p, and is %zu big\n", (void*)h->text, h->textsz); } + ii = FindSection(h->SHEntries, h->numSHEntries, h->SHStrTab, ".eh_frame"); + if(ii) { + h->ehframe = (uintptr_t)(h->SHEntries[ii].sh_addr); + h->ehframe_end = h->ehframe + h->SHEntries[ii].sh_size; + printf_log(LOG_DEBUG, "The .eh_frame section is at address %p..%p\n", (void*)h->ehframe, (void*)h->ehframe_end); + } + ii = FindSection(h->SHEntries, h->numSHEntries, h->SHStrTab, ".eh_frame_hdr"); + if(ii) { + h->ehframehdr = (uintptr_t)(h->SHEntries[ii].sh_addr); + printf_log(LOG_DEBUG, "The .eh_frame_hdr section is at address %p\n", (void*)h->ehframehdr); + } LoadNamedSection(f, h->SHEntries, h->numSHEntries, h->SHStrTab, ".dynstr", "DynSym Strings", SHT_STRTAB, (void**)&h->DynStr, NULL); LoadNamedSection(f, h->SHEntries, h->numSHEntries, h->SHStrTab, ".dynsym", "DynSym", SHT_DYNSYM, (void**)&h->DynSym, &h->numDynSym); |