linux কিভাবে লিনাক্সে এক্সিকিউটেবল দ্বারা ব্যবহৃত সমস্ত শেয়ারকৃত লাইব্রেরি প্রদর্শন করবেন?




লিনাক্সের সুবিধা (8)

  1. প্রতিটি এক্সিকিউটেবলের জন্য ভাগ করা লাইব্রেরির তালিকাতে ldd ব্যবহার করুন।
  2. আউটপুট পরিষ্কার করুন
  3. সাজান, গণনা গণনা, গণনা অনুসারে সাজান

"/ Bin" ডিরেক্টরির মধ্যে সমস্ত এক্সিকিউটেবলগুলির জন্য উত্তর খুঁজে পেতে:

find /bin -type f -perm /a+x -exec ldd {} \; \
| grep so \
| sed -e '/^[^\t]/ d' \
| sed -e 's/\t//' \
| sed -e 's/.*=..//' \
| sed -e 's/ (0.*)//' \
| sort \
| uniq -c \
| sort -n

সব ডিরেক্টরি অনুসন্ধান করতে "/ bin" উপরে "/" পরিবর্তন করুন।

আউটপুট (শুধু / bin ডিরেক্টরিের জন্য) এর মতো কিছু দেখতে হবে:

  1 /lib64/libexpat.so.0
  1 /lib64/libgcc_s.so.1
  1 /lib64/libnsl.so.1
  1 /lib64/libpcre.so.0
  1 /lib64/libproc-3.2.7.so
  1 /usr/lib64/libbeecrypt.so.6
  1 /usr/lib64/libbz2.so.1
  1 /usr/lib64/libelf.so.1
  1 /usr/lib64/libpopt.so.0
  1 /usr/lib64/librpm-4.4.so
  1 /usr/lib64/librpmdb-4.4.so
  1 /usr/lib64/librpmio-4.4.so
  1 /usr/lib64/libsqlite3.so.0
  1 /usr/lib64/libstdc++.so.6
  1 /usr/lib64/libz.so.1
  2 /lib64/libasound.so.2
  2 /lib64/libblkid.so.1
  2 /lib64/libdevmapper.so.1.02
  2 /lib64/libpam_misc.so.0
  2 /lib64/libpam.so.0
  2 /lib64/libuuid.so.1
  3 /lib64/libaudit.so.0
  3 /lib64/libcrypt.so.1
  3 /lib64/libdbus-1.so.3
  4 /lib64/libresolv.so.2
  4 /lib64/libtermcap.so.2
  5 /lib64/libacl.so.1
  5 /lib64/libattr.so.1
  5 /lib64/libcap.so.1
  6 /lib64/librt.so.1
  7 /lib64/libm.so.6
  9 /lib64/libpthread.so.0
 13 /lib64/libselinux.so.1
 13 /lib64/libsepol.so.1
 22 /lib64/libdl.so.2
 83 /lib64/ld-linux-x86-64.so.2
 83 /lib64/libc.so.6

সম্পাদনা - সরানো "grep -P"

https://code.i-harness.com

আমি জানতে চাই যে কোন লাইব্রেরিগুলি আমার সিস্টেমে এক্সিকিউটেবলগুলি ব্যবহার করে। আরো বিশেষভাবে, আমি র্যাঙ্ক করতে চাই যে লাইব্রেরিগুলি সবচেয়ে বেশি ব্যবহার করা হয়, যা বাইনারিগুলি ব্যবহার করে। কিভাবে আমি এটি করতে পারব?


আমি আমার এআরএম টুলচেইনে লিড ছিল না তাই আমি objdump ব্যবহার:

$ (CROSS_COMPILE) objdump -p

এই ক্ষেত্রে:

objdump -p /usr/bin/python:

Dynamic Section:
  NEEDED               libpthread.so.0
  NEEDED               libdl.so.2
  NEEDED               libutil.so.1
  NEEDED               libssl.so.1.0.0
  NEEDED               libcrypto.so.1.0.0
  NEEDED               libz.so.1
  NEEDED               libm.so.6
  NEEDED               libc.so.6
  INIT                 0x0000000000416a98
  FINI                 0x000000000053c058
  GNU_HASH             0x0000000000400298
  STRTAB               0x000000000040c858
  SYMTAB               0x0000000000402aa8
  STRSZ                0x0000000000006cdb
  SYMENT               0x0000000000000018
  DEBUG                0x0000000000000000
  PLTGOT               0x0000000000832fe8
  PLTRELSZ             0x0000000000002688
  PLTREL               0x0000000000000007
  JMPREL               0x0000000000414410
  RELA                 0x0000000000414398
  RELASZ               0x0000000000000078
  RELAENT              0x0000000000000018
  VERNEED              0x0000000000414258
  VERNEEDNUM           0x0000000000000008
  VERSYM               0x0000000000413534

আরও একটি বিকল্প শুধু অবস্থিত ফাইল পড়া যেতে পারে

/proc/<pid>/maps

উদাহরণস্বরূপ প্রক্রিয়া আইডি 2601 তারপর কমান্ড হয়

cat /proc/2601/maps

এবং আউটপুট মত

7fb37a8f2000-7fb37a8f4000 r-xp 00000000 08:06 4065647                    /usr/lib/x86_64-linux-gnu/libproxy/0.4.15/modules/network_networkmanager.so
7fb37a8f4000-7fb37aaf3000 ---p 00002000 08:06 4065647                    /usr/lib/x86_64-linux-gnu/libproxy/0.4.15/modules/network_networkmanager.so
7fb37aaf3000-7fb37aaf4000 r--p 00001000 08:06 4065647                    /usr/lib/x86_64-linux-gnu/libproxy/0.4.15/modules/network_networkmanager.so
7fb37aaf4000-7fb37aaf5000 rw-p 00002000 08:06 4065647                    /usr/lib/x86_64-linux-gnu/libproxy/0.4.15/modules/network_networkmanager.so
7fb37aaf5000-7fb37aafe000 r-xp 00000000 08:06 4065646                    /usr/lib/x86_64-linux-gnu/libproxy/0.4.15/modules/config_gnome3.so
7fb37aafe000-7fb37acfd000 ---p 00009000 08:06 4065646                    /usr/lib/x86_64-linux-gnu/libproxy/0.4.15/modules/config_gnome3.so
7fb37acfd000-7fb37acfe000 r--p 00008000 08:06 4065646                    /usr/lib/x86_64-linux-gnu/libproxy/0.4.15/modules/config_gnome3.so
7fb37acfe000-7fb37acff000 rw-p 00009000 08:06 4065646                    /usr/lib/x86_64-linux-gnu/libproxy/0.4.15/modules/config_gnome3.so
7fb37acff000-7fb37ad1d000 r-xp 00000000 08:06 3416761                    /usr/lib/x86_64-linux-gnu/libproxy.so.1.0.0
7fb37ad1d000-7fb37af1d000 ---p 0001e000 08:06 3416761                    /usr/lib/x86_64-linux-gnu/libproxy.so.1.0.0
7fb37af1d000-7fb37af1e000 r--p 0001e000 08:06 3416761                    /usr/lib/x86_64-linux-gnu/libproxy.so.1.0.0
7fb37af1e000-7fb37af1f000 rw-p 0001f000 08:06 3416761                    /usr/lib/x86_64-linux-gnu/libproxy.so.1.0.0
7fb37af1f000-7fb37af21000 r-xp 00000000 08:06 4065186                    /usr/lib/x86_64-linux-gnu/gio/modules/libgiolibproxy.so
7fb37af21000-7fb37b121000 ---p 00002000 08:06 4065186                    /usr/lib/x86_64-linux-gnu/gio/modules/libgiolibproxy.so
7fb37b121000-7fb37b122000 r--p 00002000 08:06 4065186                    /usr/lib/x86_64-linux-gnu/gio/modules/libgiolibproxy.so
7fb37b122000-7fb37b123000 rw-p 00003000 08:06 4065186                    /usr/lib/x86_64-linux-gnu/gio/modules/libgiolibproxy.so

ইউনিক্স সিস্টেম, অনুমান বাইনারি (এক্সিকিউটেবল) নাম পরীক্ষা হয়। তারপর আমরা পরীক্ষায় ব্যবহৃত লাইব্রেরি তালিকা করতে নিম্নলিখিত কমান্ডটি ব্যবহার করি

ldd test

এক্সিকিউটেবল একটি প্রোগ্রাম শেয়ারকৃত লাইব্রেরি নির্ভরতা পরীক্ষা করে দেখুন

কোন লাইব্রেরি কোন নির্দিষ্ট এক্সিকিউটেবল নির্ভর করে তা খুঁজে বের করতে, আপনি ldd কমান্ডটি ব্যবহার করতে পারেন। এই কমান্ড একটি এক্সিকিউটেবল লাইব্রেরি নির্ভরতা খুঁজে বের করতে গতিশীল লিঙ্কারকে আমন্ত্রণ জানায়।

> $ ldd / path / to / program

উল্লেখ্য যে অবিশ্বাস্য তৃতীয়-পক্ষের অ্যাক্টিভিউটেবলের সাথে এটি চালানোর জন্য সুপারিশ করা হয় না কারণ লিডের কিছু সংস্করণ সরাসরি তার লাইব্রেরী নির্ভরতা সনাক্ত করতে এক্সিকিউটেবলকে আহ্বান করতে পারে, যা সুরক্ষা ঝুঁকি হতে পারে।

পরিবর্তে, অজানা অ্যাপ্লিকেশন বাইনারিটির লাইব্রেরি নির্ভরতা প্রদর্শন করার জন্য একটি নিরাপদ উপায় নিম্নলিখিত কমান্ডটি ব্যবহার করা।

$ objdump -p / পাথ / থেকে / প্রোগ্রাম | grep প্রয়োজন

আরও তথ্যের জন্য


ডিফল্টরূপে ওএস এক্স এ কোন ldd , objdump বা lsof । বিকল্প হিসাবে, otool -L চেষ্টা করুন:

$ otool -L `which openssl`
/usr/bin/openssl:
    /usr/lib/libcrypto.0.9.8.dylib (compatibility version 0.9.8, current version 0.9.8)
    /usr/lib/libssl.0.9.8.dylib (compatibility version 0.9.8, current version 0.9.8)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)

এই উদাহরণে, which openssl opensl ব্যবহার করে প্রদত্ত এক্সিকিউটেবল এবং বর্তমান ব্যবহারকারীর পরিবেশের জন্য সম্পূর্ণরূপে যোগ্য পথ পূরণ করে।


লিনাক্সে আমি ব্যবহার করি:

lsof -P -T -p Application_PID

এক্সিকিউটেবল একটি নন ডিফল্ট লোডার ব্যবহার করে এটি ldd চেয়ে ভাল কাজ করে


ldd সঙ্গে আপনি সরঞ্জাম ব্যবহার করে যে লাইব্রেরি পেতে পারেন। টুলের একটি সেটের জন্য লাইব্রেরি ব্যবহার করার জন্য আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন।

ldd /bin/* /usr/bin/* ... | sed -e '/^[^\t]/ d; s/^\t\(.* => \)\?\([^ ]*\) (.*/\2/g' | sort | uniq -c

(এখানে sed সমস্ত লাইনকে স্ট্র্যাপ করে যা কোনও ট্যাবের সাথে শুরু হয় না এবং কেবলমাত্র প্রকৃত লাইব্রেরিগুলি ফিল্টার করে। sort | uniq -c আপনি প্রতিটি লাইব্রেরিটিকে গণনা সহ কতবার গণনা করে তা উল্লেখ করে।)

আপনি ব্যবহারের জন্য লাইব্রেরি পেতে শেষ পর্যন্ত sort -g যোগ করতে চান।

মনে রাখবেন যে আপনি সম্ভবত উপরের কমান্ডের সাথে দুটি অ লাইব্রেরি লাইন পাবেন। স্ট্যাটিক এক্সিকিউটেবলগুলির মধ্যে একটি ("কোন গতিশীল এক্সিকিউটেবল নয়") এবং কোনও লাইব্রেরি ছাড়া। পরেরটি linux-gate.so.1 যা আপনার ফাইল সিস্টেমের লাইব্রেরি নয় তবে কার্নেল দ্বারা "সরবরাহ করা"।






shared-libraries