diff options
Diffstat (limited to 'man/man1/ldd.1')
-rw-r--r-- | man/man1/ldd.1 | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/man/man1/ldd.1 b/man/man1/ldd.1 new file mode 100644 index 0000000..8f97777 --- /dev/null +++ b/man/man1/ldd.1 @@ -0,0 +1,180 @@ +.\" Copyright 1995-2000 David Engel (david@ods.com) +.\" Copyright 1995 Rickard E. Faith (faith@cs.unc.edu) +.\" Copyright 2000 Ben Collins (bcollins@debian.org) +.\" Redone for glibc 2.2 +.\" Copyright 2000 Jakub Jelinek (jakub@redhat.com) +.\" Corrected. +.\" and Copyright (C) 2012, 2016, Michael Kerrisk <mtk.manpages@gmail.com> +.\" +.\" SPDX-License-Identifier: GPL-1.0-or-later +.\" +.TH ldd 1 2024-05-02 "Linux man-pages (unreleased)" +.SH NAME +ldd \- print shared object dependencies +.SH SYNOPSIS +.nf +.BR ldd " [\fIoption\fP]... \fIfile\fP..." +.fi +.SH DESCRIPTION +.B ldd +prints the shared objects (shared libraries) required by each program or +shared object specified on the command line. +An example of its use and output +is the following: +.P +.in +4n +.EX +$ \fBldd /bin/ls\fP + linux\-vdso.so.1 (0x00007ffcc3563000) + libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f87e5459000) + libcap.so.2 => /lib64/libcap.so.2 (0x00007f87e5254000) + libc.so.6 => /lib64/libc.so.6 (0x00007f87e4e92000) + libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f87e4c22000) + libdl.so.2 => /lib64/libdl.so.2 (0x00007f87e4a1e000) + /lib64/ld\-linux\-x86\-64.so.2 (0x00005574bf12e000) + libattr.so.1 => /lib64/libattr.so.1 (0x00007f87e4817000) + libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f87e45fa000) +.EE +.in +.P +In the usual case, +.B ldd +invokes the standard dynamic linker (see +.BR ld.so (8)) +with the +.B LD_TRACE_LOADED_OBJECTS +environment variable set to 1. +This causes the dynamic linker to inspect the program's dynamic dependencies, +and find (according to the rules described in +.BR ld.so (8)) +and load the objects that satisfy those dependencies. +For each dependency, +.B ldd +displays the location of the matching object +and the (hexadecimal) address at which it is loaded. +(The +.I linux\-vdso +and +.I ld\-linux +shared dependencies are special; see +.BR vdso (7) +and +.BR ld.so (8).) +.\" +.SS Security +Be aware that in some circumstances +(e.g., where the program specifies an ELF interpreter other than +.IR ld\-linux.so ), +.\" The circumstances are where the program has an interpreter +.\" other than ld-linux.so. In this case, ldd tries to execute the +.\" program directly with LD_TRACE_LOADED_OBJECTS=1, with the +.\" result that the program interpreter gets control, and can do +.\" what it likes, or pass control to the program itself. +.\" Much more detail at +.\" http://www.catonmat.net/blog/ldd-arbitrary-code-execution/ +some versions of +.B ldd +may attempt to obtain the dependency information +by attempting to directly execute the program, +which may lead to the execution of whatever code is defined +in the program's ELF interpreter, +and perhaps to execution of the program itself. +.\" Mainline glibc's ldd allows this possibility (the line +.\" try_trace "$file" +.\" in glibc 2.15, for example), but many distro versions of +.\" ldd seem to remove that code path from the script. +(Before glibc 2.27, +.\" glibc commit eedca9772e99c72ab4c3c34e43cc764250aa3e3c +the upstream +.B ldd +implementation did this for example, +although most distributions provided a modified version that did not.) +.P +Thus, you should +.I never +employ +.B ldd +on an untrusted executable, +since this may result in the execution of arbitrary code. +A safer alternative when dealing with untrusted executables is: +.P +.in +4n +.EX +$ \fBobjdump \-p /path/to/program | grep NEEDED\fP +.EE +.in +.P +Note, however, that this alternative shows only the direct dependencies +of the executable, while +.B ldd +shows the entire dependency tree of the executable. +.SH OPTIONS +.TP +.B \-\-version +Print the version number of +.BR ldd . +.TP +.B \-\-verbose +.TQ +.B \-v +Print all information, including, for example, +symbol versioning information. +.TP +.B \-\-unused +.TQ +.B \-u +Print unused direct dependencies. +(Since glibc 2.3.4.) +.TP +.B \-\-data\-relocs +.TQ +.B \-d +Perform relocations and report any missing objects (ELF only). +.TP +.B \-\-function\-relocs +.TQ +.B \-r +Perform relocations for both data objects and functions, and +report any missing objects or functions (ELF only). +.TP +.B \-\-help +Usage information. +.\" .SH NOTES +.\" The standard version of +.\" .B ldd +.\" comes with glibc2. +.\" Libc5 came with an older version, still present +.\" on some systems. +.\" The long options are not supported by the libc5 version. +.\" On the other hand, the glibc2 version does not support +.\" .B \-V +.\" and only has the equivalent +.\" .BR \-\-version . +.\" .P +.\" The libc5 version of this program will use the name of a library given +.\" on the command line as-is when it contains a \[aq]/\[aq]; otherwise it +.\" searches for the library in the standard locations. +.\" To run it +.\" on a shared library in the current directory, prefix the name with "./". +.SH BUGS +.B ldd +does not work on a.out shared libraries. +.P +.B ldd +does not work with some extremely old a.out programs which were +built before +.B ldd +support was added to the compiler releases. +If you use +.B ldd +on one of these programs, the program will attempt to run with +.I argc += 0 and the results will be unpredictable. +.\" .SH AUTHOR +.\" David Engel. +.\" Roland McGrath and Ulrich Drepper. +.SH SEE ALSO +.BR pldd (1), +.BR sprof (1), +.BR ld.so (8), +.BR ldconfig (8) |