From fcb115309b09e0a486c51f8e9d359a54ff1ba3e1 Mon Sep 17 00:00:00 2001 From: Jose Fonseca Date: Tue, 27 Mar 2018 12:41:43 +0100 Subject: [PATCH] Fix main program resolution. It seems with ASLR main program get a nonzero l_addr, but an empty l_name. --- memtrail.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/memtrail.cpp b/memtrail.cpp index 548c361..f75d1a0 100644 --- a/memtrail.cpp +++ b/memtrail.cpp @@ -163,6 +163,7 @@ _dladdr (const void *address, Dl_info *info) { if (0) fprintf(stderr, "0x%lx:\n", addr); + assert(lm->l_prev == 0); while (lm->l_prev) { lm = lm->l_prev; } @@ -184,7 +185,11 @@ _dladdr (const void *address, Dl_info *info) { #else #error #endif + l_name = lm->l_name; + } + assert(l_name != nullptr); + if (l_name[0] == 0 && lm == _r_debug.r_map) { // Determine the absolute path to progname if (progname[0] == 0) { size_t len = readlink("/proc/self/exe", progname, sizeof progname - 1); @@ -194,7 +199,6 @@ _dladdr (const void *address, Dl_info *info) { } progname[len] = 0; } - l_name = progname; }