うすべての共有ライブラリの使用による実行可能ファイルをLinuxでは?

StackOverflow https://stackoverflow.com/questions/50159

  •  09-06-2019
  •  | 
  •  

質問

というのはあるライブラリの使用による実行可能ファイルを自分のシステム。具体的には、そういったランクするライブラリを使用されると共に、バイナリを使用します。する方法を教えてください。

役に立ちましたか?

解決

  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"

他のヒント

なかなかldd自分の腕をツールチェーンで使用した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

るのかなどについて学習図書館のバイナリを使用ldd

ldd path/to/the/tool

い書けなシェルスクリプトへのシステムです。

Linuxを使ってい:

lsof -P -T -p Application_PID

この作品より ldd 時に実行ファイルを使用し 非デフォルトローダー

チェック共有ライブラリの依存関係のプログラムの実行

う図書館の特定の実行ファイルに依存して利用できlddコマンドです。このコマンドを呼び出しの動的リンカーを探し出す図書館の依存関係の実行形式にまとめたものです。

>$lddすることで/path/to/プログラム

ではありませんので予めご了承おすすめの走行ldd他の信頼できない第三者の実行もあるのでバージョンのlddが直接呼び出しの実行を特定し、その依存関係図書館、セキュリティ上のリスクです。

その代わり、より安全なリンクを表示して図書館の依存関係の未知の応用バイナリは以下のコマンドです。

$objdump-p/path/to/プログラム|grepが必要

のための詳細情報

readelf -d 再帰

redelf -d 作同様の出力 objdump -p たお話ししたように、これまで: https://stackoverflow.com/a/15520982/895245

でも注意する動的ライブラリに信頼されるその他の動的ライブラリは、すrecurse.

例:

readelf -d /bin/ls | grep 'NEEDED'

サンプルouptut:

 0x0000000000000001 (NEEDED)             Shared library: [libselinux.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libacl.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]

その後:

$ locate libselinux.so.1
/lib/i386-linux-gnu/libselinux.so.1
/lib/x86_64-linux-gnu/libselinux.so.1
/mnt/debootstrap/lib/x86_64-linux-gnu/libselinux.so.1

を選択し、"リピート

readelf -d /lib/x86_64-linux-gnu/libselinux.so.1 | grep 'NEEDED'

サンプル出力:

0x0000000000000001 (NEEDED)             Shared library: [libpcre.so.3]
0x0000000000000001 (NEEDED)             Shared library: [libdl.so.2]
0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
0x0000000000000001 (NEEDED)             Shared library: [ld-linux-x86-64.so.2]

います。

/proc/<pid>/maps 走行プロセス

このすべての図書館の使用により走行可能ファイル.E.g.:

sudo awk '/\.so/{print $6}' /proc/1/maps | sort -u

全ての現在ロードされた動的依存関係の init (PID 1):

/lib/x86_64-linux-gnu/ld-2.23.so
/lib/x86_64-linux-gnu/libapparmor.so.1.4.0
/lib/x86_64-linux-gnu/libaudit.so.1.0.0
/lib/x86_64-linux-gnu/libblkid.so.1.1.0
/lib/x86_64-linux-gnu/libc-2.23.so
/lib/x86_64-linux-gnu/libcap.so.2.24
/lib/x86_64-linux-gnu/libdl-2.23.so
/lib/x86_64-linux-gnu/libkmod.so.2.3.0
/lib/x86_64-linux-gnu/libmount.so.1.1.0
/lib/x86_64-linux-gnu/libpam.so.0.83.1
/lib/x86_64-linux-gnu/libpcre.so.3.13.2
/lib/x86_64-linux-gnu/libpthread-2.23.so
/lib/x86_64-linux-gnu/librt-2.23.so
/lib/x86_64-linux-gnu/libseccomp.so.2.2.3
/lib/x86_64-linux-gnu/libselinux.so.1
/lib/x86_64-linux-gnu/libuuid.so.1.3.0

この方法も図書館開 dlopen, 検と この最小限の設定 ハッキングし、 sleep(1000) Ubuntu18.04.

参照: https://superuser.com/questions/310199/see-currently-loaded-shared-objects-in-linux/1243089

UNIXシステムとえば、バイナリ(実行ファイル名はテストです。その次のコマンドを使用しリストの図書館の試験に使用するには

ldd test

OS Xのデフォルトではありません 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 充填を完全修飾パスが指定された実行ファイルおよび現在のユーザ環境です。

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 ではない図書館"のファイルシステムが"供給"を含んでいます。

ubuntu 印刷パッケージに関連するの実行

ldd executable_name|awk'{print$3}'|xargs dpkg-S|awk-F""'{print$1}'

一つのオプションであること"が成立するファイルの読み込みがあ

/proc/<pid>/maps

例えば、プロセスidは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

その後もう調査の依存関係から第3者機関に供給ライブラリ(32vs64ビット実行パス(s)).

私たちのQ&D recursing bashスクリプト"に基づきreadelf-d'suggestionにRHEL6distro.

で非常に基本的なまでのテストの依存関係は毎回これを効率的に行うためにしていますeべ).出力は非常に基本です。

#! /bin/bash

recurse ()
# Param 1 is the nuumber of spaces that the output will be prepended with
# Param 2 full path to library
{
#Use 'readelf -d' to find dependencies
dependencies=$(readelf -d ${2} | grep NEEDED | awk '{ print $5 }' | tr -d '[]')
for d in $dependencies; do
   echo "${1}${d}"
   nm=${d##*/}
   #libstdc++ hack for the '+'-s
   nm1=${nm//"+"/"\+"}
   # /lib /lib64 /usr/lib and /usr/lib are searched
   children=$(locate ${d} | grep -E "(^/(lib|lib64|usr/lib|usr/lib64)/${nm1})")
   rc=$?
   #at least locate... didn't fail
   if [ ${rc} == "0" ] ; then
      #we have at least one dependency
      if [ ${#children[@]} -gt 0 ]; then
         #check the dependeny's dependencies
         for c in $children; do
          recurse "  ${1}" ${c}
         done
      else
         echo "${1}no children found"
      fi
   else
      echo "${1}locate failed for ${d}"
   fi
done
}
# Q&D -- recurse needs 2 params could/should be supplied from cmdline
recurse "" !!full path to library you want to investigate!!

リダイレクト出力をファイルgrepのための"発見"するよう又は失敗しました'

を使用し、変更、ご自身のリスクのすることが出来ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top