mirror of https://github.com/mkerrisk/man-pages
173 lines
5.2 KiB
Groff
173 lines
5.2 KiB
Groff
.\" 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>
|
|
.\"
|
|
.\" %%%LICENSE_START(GPL_NOVERSION_ONELINE)
|
|
.\" Do not restrict distribution.
|
|
.\" May be distributed under the GNU General Public License
|
|
.\" %%%LICENSE_END
|
|
.\"
|
|
.TH LDD 1 2017-09-15 "" "Linux Programmer's Manual"
|
|
.SH NAME
|
|
ldd \- print shared object dependencies
|
|
.SH SYNOPSIS
|
|
.BR ldd " [\fIoption\fP]... \fIfile\fP..."
|
|
.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:
|
|
.PP
|
|
.in +2n
|
|
.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
|
|
.PP
|
|
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,
|
|
.BR 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
|
|
.BR 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.
|
|
(In glibc versions before 2.27,
|
|
.\" glibc commit eedca9772e99c72ab4c3c34e43cc764250aa3e3c
|
|
the upstream
|
|
.B ldd
|
|
implementation did this for example,
|
|
although most distributions provided a modified version that did not.)
|
|
.PP
|
|
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:
|
|
.PP
|
|
.in +4n
|
|
.EX
|
|
$ \fBobjdump \-p /path/to/program | grep NEEDED\fP
|
|
.EE
|
|
.in
|
|
.PP
|
|
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
|
|
.BR \-v ", " \-\-verbose
|
|
Print all information, including, for example,
|
|
symbol versioning information.
|
|
.TP
|
|
.BR \-u ", " \-\-unused
|
|
Print unused direct dependencies.
|
|
(Since glibc 2.3.4.)
|
|
.TP
|
|
.BR \-d ", " \-\-data\-relocs
|
|
Perform relocations and report any missing objects (ELF only).
|
|
.TP
|
|
.BR \-r ", " \-\-function\-relocs
|
|
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 .
|
|
.\" .LP
|
|
.\" 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.
|
|
.PP
|
|
.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)
|