summaryrefslogtreecommitdiffstats
path: root/man/man1/ldd.1
diff options
context:
space:
mode:
Diffstat (limited to 'man/man1/ldd.1')
-rw-r--r--man/man1/ldd.1180
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)