با استفاده از فرمان "ldd" در لینوکس

دستور ldd می تواند مورد استفاده قرار گیرد تا به شما کتابخانه های به اشتراک گذاشته شده مورد نیاز هر برنامه داده شده را نشان دهد.

این برای کار کردن زمانی مفید است که یک وابستگی از دست رفته وجود داشته باشد و برای لیست کردن توابع و اشیاء از دست رفته استفاده شود.

syntax فرمان ldd

این نحو مناسب هنگام استفاده از دستور ldd است:

ldd [OPTION] ... FILE ...

در اینجا سوئیچ های دستورالعمل ldd موجود است که می تواند در نقطه [OPTION] در فرمان بالا وارد شود:

--help print this help and exit --version نسخه چاپ اطلاعات و خروج -d، - data-relocs انتقال داده ها relocations -r، --function-relots پردازش داده ها و تابع relocations -u، - unused print وابستگی های مستقیم استفاده نشده -v، --verbose تمام اطلاعات را چاپ کنید

نحوه استفاده از فرمان ldd

شما می توانید از دستور زیر برای دریافت اطلاعات بیشتر از هر دستور ldd استفاده کنید:

ldd -v / path / to / program / executable

خروجی اطلاعات نسخه و همچنین مسیرها و آدرس ها را به کتابخانه های اشتراکی نشان می دهد، مانند:

ldd libshared.so linux-vdso.so.1 => (0x00007fff26ac8000) libc.so.6 => /lib/libc.so.6 0x00007ff1df55a000) /lib64/ld-linux-x86-64.so.2 (0x00007ff1dfafe000)

اگر فایل SO وجود نداشته باشد، می توانید کتابخانه های از دست رفته را با استفاده از دستور زیر پیدا کنید:

ldd -d مسیر / به / برنامه

خروجی شبیه به موارد زیر است:

linux-vdso.so.1 (0x00007ffc2936b000) /home/gary/demo/garylib.so => ​​foundlibc.so.6 => usr / lib / libc.so.6 (0x00007fd0c6259000) / lib64 / ld-linux-x86 -64.so.2 (0x00007fd0c65fd000)

مهم: هرگز فرمان ldd را در برابر یک برنامه غیر قابل اعتماد اجرا نکنید زیرا فرمان ممکن است آن را اجرا کند. این یک جایگزین ایمن تر است که نشان می دهد فقط وابستگی های مستقیم و نه در کل وابستگی درخت: objdump -p / path / to / program | grep مورد نیاز است

چگونه مسیر را برای یک برنامه پیدا کنید

اگر بخواهید وابستگی خود را با ldd پیدا کنید، می توانید مسیر کامل را به یک برنامه ارائه دهید، که می توانید چندین راه را انجام دهید.

برای مثال، این است که چگونه می توانید مسیر را به فایرفاکس پیدا کنید:

پیدا / نام فایرفاکس

با این حال، مشکل با دستور find این است که نه تنها فایل اجرایی را لیست می کند، بلکه همه جا که فایرفاکس قرار دارد، مانند این است:

این رویکرد کمی کم کاری است و شما ممکن است نیاز به استفاده از دستور sudo برای ارتقاء امتیازات خود داشته باشید، در غیر این صورت احتمالا بسیاری از خطاها را مجاز دریافت می کنید.

برای پیدا کردن یک مسیر برنامه، جای آن بسیار ساده تر است که از دستور command where استفاده کنید:

کجا فایرفاکس

این بار خروجی ممکن است مانند این باشد:

/ usr / bin / firefox

/ etc / firefox

/ usr / lib / فایرفاکس

همه چیزهایی که اکنون باید برای پیدا کردن کتابخانه های مشترک برای فایرفاکس انجام دهید عبارتند از:

ldd / usr / bin / firefox

خروجی از فرمان چیزی شبیه به این خواهد بود:

linux-vdso.so.1 (0x00007ffff8364000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007feb9917a000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007feb98f76000)
libstdc ++. so.6 => /usr/lib/libstdc++.so.6 (0x00007feb98bf4000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007feb988f6000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007feb986e0000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007feb9833c000)
/lib64/ld-linux-x86-64.so.2 (0x00007feb99397000)

لینوکس-vdso.so.1 نام کتابخانه است و شماره شصت آدرس آدرس کتابخانه ای است که در حافظه بارگذاری می شود.

شما در بسیاری از خطوط دیگر متوجه خواهید شد که نماد => توسط یک مسیر دنبال می شود. این مسیر به باینری فیزیکی است؛ شماره شصت آدرس محل ذخیره کتابخانه است.