diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2022-06-19 21:18:05 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2022-06-19 21:18:05 +0200 |
| commit | 962c3c25b657ef7ad117aa5f19040b3430480b30 (patch) | |
| tree | 25b3778e63045b40fbb14f10af0ab6bf332a81ba /src/wrapped | |
| parent | ae6d6d753a1206655f7afae707d6cc759de85ec2 (diff) | |
| download | box64-962c3c25b657ef7ad117aa5f19040b3430480b30.tar.gz box64-962c3c25b657ef7ad117aa5f19040b3430480b30.zip | |
Various small debugging improvments
Diffstat (limited to 'src/wrapped')
| -rwxr-xr-x | src/wrapped/wrappedlibc.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c index 675963d6..f46da308 100755 --- a/src/wrapped/wrappedlibc.c +++ b/src/wrapped/wrappedlibc.c @@ -2611,22 +2611,23 @@ EXPORT int my_backtrace(x64emu_t* emu, void** buffer, int size) EXPORT char** my_backtrace_symbols(x64emu_t* emu, uintptr_t* buffer, int size) { (void)emu; - char** ret = (char**)calloc(1, size*sizeof(char*) + size*100); // capping each strings to 100 chars + char** ret = (char**)calloc(1, size*sizeof(char*) + size*200); // capping each strings to 200 chars char* s = (char*)(ret+size); for (int i=0; i<size; ++i) { uintptr_t start = 0; uint64_t sz = 0; elfheader_t *hdr = FindElfAddress(my_context, buffer[i]); const char* symbname = FindNearestSymbolName(hdr, (void*)buffer[i], &start, &sz); + if(!sz) sz=0x100; // arbitrary value... if (symbname && buffer[i]>=start && (buffer[i]<(start+sz) || !sz)) { - snprintf(s, 100, "%s(%s+%lx) [%p]", ElfName(hdr), symbname, buffer[i] - start, (void*)buffer[i]); + snprintf(s, 200, "%s(%s+%lx) [%p]", ElfName(hdr), symbname, buffer[i] - start, (void*)buffer[i]); } else if (hdr) { - snprintf(s, 100, "%s+%lx [%p]", ElfName(hdr), buffer[i] - (uintptr_t)GetBaseAddress(hdr), (void*)buffer[i]); + snprintf(s, 200, "%s+%lx [%p]", ElfName(hdr), buffer[i] - (uintptr_t)GetBaseAddress(hdr), (void*)buffer[i]); } else { - snprintf(s, 100, "??? [%p]", (void*)buffer[i]); + snprintf(s, 200, "??? [%p]", (void*)buffer[i]); } ret[i] = s; - s += 100; + s += 200; } return ret; } @@ -2634,15 +2635,16 @@ EXPORT char** my_backtrace_symbols(x64emu_t* emu, uintptr_t* buffer, int size) EXPORT void my_backtrace_symbols_fd(x64emu_t* emu, uintptr_t* buffer, int size, int fd) { (void)emu; - char s[100]; + char s[200]; for (int i=0; i<size; ++i) { uintptr_t start = 0; uint64_t sz = 0; const char* symbname = FindNearestSymbolName(FindElfAddress(my_context, buffer[i]), (void*)buffer[i], &start, &sz); + if(!sz) sz=0x100; // arbitrary value... if(symbname && buffer[i]>=start && (buffer[i]<(start+sz) || !sz)) - snprintf(s, 100, "%s+%ld [%p]\n", symbname, buffer[i] - start, (void*)buffer[i]); + snprintf(s, 200, "%s+%ld [%p]\n", symbname, buffer[i] - start, (void*)buffer[i]); else - snprintf(s, 100, "??? [%p]\n", (void*)buffer[i]); + snprintf(s, 200, "??? [%p]\n", (void*)buffer[i]); int dummy = write(fd, s, strlen(s)); (void)dummy; } |