| LDD(1) | دستورهای کاربری | LDD(1) |
نام (NAME)
ldd - چاپ و نمایش وابستگیهای کتابخانهای اشیای مشترک
خلاصه دستور (SYNOPSIS)
ldd [گزینهها]... فایل...
توضیحات (DESCRIPTION)
دستور ldd فهرست تمام کتابخانههای پویای مشترک (shared libraries) مورد نیاز یک برنامه یا شیء مشترک را در خروجی چاپ میکند. نمونهای از کاربرد و خروجی آن به شرح زیر است:
$ ldd /bin/ls
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)
در حالت معمول، ldd پیونددهنده پویای استاندارد (ببینید ld.so(8)) را با متغیر محیطی LD_TRACE_LOADED_OBJECTS که بر روی ۱ تنظیم شده فراخوانی میکند. این امر موجب میشود پیونددهنده پویا وابستگیهای پویای برنامه را بازرسی کند، و اشیایی که این وابستگیها را برآورده میسازند (طبق قواعد شرحدادهشده در ld.so(8)) یافته و بارگذاری نماید. برای هر وابستگی، ldd مکان شیء منطبق و نشانی (در مبنای ۱۶) بارگذاری آن را نمایش میدهد. (وابستگیهای مشترک linux-vdso و ld-linux ویژه هستند؛ ببینید vdso(7) و ld.so(8).)
امنیت (Security)
توجه داشته باشید که در برخی شرایط (برای مثال زمانی که برنامه یک مفسر ELF به جز ld-linux.so را تعیین کرده باشد)، برخی نسخههای ldd ممکن است برای بهدستآوردن اطلاعات وابستگیها تلاش کنند برنامه را مستقیماً اجرا نمایند که این امر میتواند منجر به اجرای هر کدی شود که در مفسر ELF برنامه تعریف شده است، و شاید حتی به اجرای خود برنامه بینجامد. (قبل از نسخه glibc 2.27، پیادهسازی بالادستی ldd برای نمونه این کار را انجام میداد، اگرچه بیشتر توزیعها نسخهای تغییریافته ارائه میدادند که اینگونه عمل نمیکرد.)
بنابراین، شما باید هرگز ldd را بر روی یک فایل اجرایی غیرقابلاعتماد به کار نبرید، زیرا این عمل ممکن است موجب اجرای کدهای دلخواه شود. یک جایگزین ایمنتر در مواجهه با فایلهای اجرایی غیرقابلاعتماد عبارت است از:
$ objdump -p /path/to/program | grep NEEDED
با این وجود توجه داشته باشید که این جایگزین تنها وابستگیهای مستقیم فایل اجرایی را نشان میدهد، در حالی که ldd تمام درخت وابستگیهای فایل اجرایی را نشان میدهد.
گزینهها (OPTIONS)
- --version
- چاپ شماره نسخه ldd.
- --verbose
- -v
- چاپ تمام اطلاعات، از جمله اطلاعات نسخهبندی نمادها (symbol versioning).
- --unused
- -u
- چاپ وابستگیهای مستقیم استفادهنشده (از glibc 2.3.4 به بعد).
- --data-relocs
- -d
- انجام بازنشانیها (relocations) و گزارش هرگونه شیء مفقود (فقط ELF).
- --function-relocs
- -r
- انجام بازنشانیها برای هر دو اشیای داده و توابع، و گزارش هرگونه شیء یا تابع مفقود (فقط ELF).
- --help
- اطلاعات استفاده و راهنما.
اشکالات (BUGS)
دستور ldd روی کتابخانههای مشترک فرمت a.out کار نمیکند.
دستور ldd با برخی برنامههای بسیار قدیمی a.out که پیش از اضافهشدن پشتیبانی ldd به نگارشهای کامپایلر کامپایل شدهاند کار نمیکند. اگر از ldd روی یکی از این برنامهها استفاده کنید، برنامه با argc برابر با ۰ تلاش به اجرا میکند و نتایج غیرقابلپیشبینی خواهد بود.
همچنین ببینید (SEE ALSO)
| مه ۲۰۲۵ | man-pages |