diff --git a/ldd/ldd.go b/ldd/ldd.go index 2862dab..365dffe 100644 --- a/ldd/ldd.go +++ b/ldd/ldd.go @@ -32,7 +32,11 @@ func Parse(stdout fmt.Stringer) ([]*Entry, error) { switch len(segment) { case 2: // /lib/ld-musl-x86_64.so.1 (0x7f04d14ef000) iL = 1 - result[i] = &Entry{Name: segment[0]} + if path.IsAbs(segment[0]) { + result[i] = &Entry{Name: segment[0], Path: segment[0]} + } else { + result[i] = &Entry{Name: segment[0]} + } case 4: // libc.musl-x86_64.so.1 => /lib/ld-musl-x86_64.so.1 (0x7f04d14ef000) iL = 3 if segment[1] != "=>" { diff --git a/ldd/ldd_test.go b/ldd/ldd_test.go index 2b9b274..bb8e602 100644 --- a/ldd/ldd_test.go +++ b/ldd/ldd_test.go @@ -57,7 +57,7 @@ libz.so.1 => /lib/libz.so.1 (0x7ff71bf80000) libcrypto.so.3 => /lib/libcrypto.so.3 (0x7ff71ba00000) libc.musl-x86_64.so.1 => /lib/ld-musl-x86_64.so.1 (0x7ff71c0a4000)`, []*ldd.Entry{ - {"/lib/ld-musl-x86_64.so.1", "", 0x7ff71c0a4000}, + {"/lib/ld-musl-x86_64.so.1", "/lib/ld-musl-x86_64.so.1", 0x7ff71c0a4000}, {"libzstd.so.1", "/usr/lib/libzstd.so.1", 0x7ff71bfd2000}, {"liblzma.so.5", "/usr/lib/liblzma.so.5", 0x7ff71bf9a000}, {"libz.so.1", "/lib/libz.so.1", 0x7ff71bf80000}, @@ -79,6 +79,35 @@ libpthread.so.0 => /nix/store/c10zhkbp6jmyh0xc5kd123ga8yy2p4hk-glibc-2.39-52/lib {"libpthread.so.0", "/nix/store/c10zhkbp6jmyh0xc5kd123ga8yy2p4hk-glibc-2.39-52/lib/libpthread.so.0", 0x00007f3199ab0000}, {"/nix/store/c10zhkbp6jmyh0xc5kd123ga8yy2p4hk-glibc-2.39-52/lib/ld-linux-x86-64.so.2", "/nix/store/c10zhkbp6jmyh0xc5kd123ga8yy2p4hk-glibc-2.39-52/lib64/ld-linux-x86-64.so.2", 0x00007f3199da5000}, }}, + {"glibc /usr/bin/xdg-dbus-proxy", ` +linux-vdso.so.1 (0x00007725f5772000) +libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x00007725f55d5000) +libgio-2.0.so.0 => /usr/lib/libgio-2.0.so.0 (0x00007725f5406000) +libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0x00007725f53a6000) +libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007725f5378000) +libc.so.6 => /usr/lib/libc.so.6 (0x00007725f5187000) +libpcre2-8.so.0 => /usr/lib/libpcre2-8.so.0 (0x00007725f50e8000) +libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0x00007725f50df000) +libz.so.1 => /usr/lib/libz.so.1 (0x00007725f50c6000) +libmount.so.1 => /usr/lib/libmount.so.1 (0x00007725f5076000) +libffi.so.8 => /usr/lib/libffi.so.8 (0x00007725f506b000) +/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007725f5774000) +libblkid.so.1 => /usr/lib/libblkid.so.1 (0x00007725f5032000)`, + []*ldd.Entry{ + {"linux-vdso.so.1", "", 0x00007725f5772000}, + {"libglib-2.0.so.0", "/usr/lib/libglib-2.0.so.0", 0x00007725f55d5000}, + {"libgio-2.0.so.0", "/usr/lib/libgio-2.0.so.0", 0x00007725f5406000}, + {"libgobject-2.0.so.0", "/usr/lib/libgobject-2.0.so.0", 0x00007725f53a6000}, + {"libgcc_s.so.1", "/usr/lib/libgcc_s.so.1", 0x00007725f5378000}, + {"libc.so.6", "/usr/lib/libc.so.6", 0x00007725f5187000}, + {"libpcre2-8.so.0", "/usr/lib/libpcre2-8.so.0", 0x00007725f50e8000}, + {"libgmodule-2.0.so.0", "/usr/lib/libgmodule-2.0.so.0", 0x00007725f50df000}, + {"libz.so.1", "/usr/lib/libz.so.1", 0x00007725f50c6000}, + {"libmount.so.1", "/usr/lib/libmount.so.1", 0x00007725f5076000}, + {"libffi.so.8", "/usr/lib/libffi.so.8", 0x00007725f506b000}, + {"/lib64/ld-linux-x86-64.so.2", "/usr/lib64/ld-linux-x86-64.so.2", 0x00007725f5774000}, + {"libblkid.so.1", "/usr/lib/libblkid.so.1", 0x00007725f5032000}, + }}, } for _, tc := range testCases { t.Run(tc.file, func(t *testing.T) {