前回、
また、
その際触れたように、
そのためPlamo Linuxでは、
get_depends.pyによる事前情報収集
前回も紹介したように、
get_
$ sudo pip install python_magic [sudo] kojima のパスワード: XXXXX Collecting python_magic Downloading python_magic-0.4.22-py2.py3-none-any.whl (12 kB) Installing collected packages: python-magic Successfully installed python-magic-0.4.22
python_
$ ls /usr/lib/python3.9/site-packages/*magic* /usr/lib/python3.9/site-packages/magic: __init__.py __pycache__/ compat.py loader.py /usr/lib/python3.9/site-packages/python_magic-0.4.22.dist-info: INSTALLER LICENSE METADATA RECORD REQUESTED WHEEL top_level.txt
なお、
python_
$ sudo ./get_depends.py searching /bin /bin/bash:ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=68f876940891eb6a20d3c34e82ae2685439a0ef7, stripped /bin/bash is ELF /bin/btrfs:ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-x86-64.so.2, BuildID[sha1]=c9d66839d500ce2ba0ecfe0c7d4fdf1b0c4bae97, for GNU/Linux 3.2.0, stripped /bin/btrfs is ELF .... zlib.cpython-3.8.so, /opt/libreoffice7.1/program/python-core-3.8.4/lib/lib-dynload/zlib.cpython-3.8.so, /lib64/ld-linux-x86-64.so.2, /lib64/ld-linux-x86-64.so.2
get_
作成されるdepends.
$ sqlite3 depends.sql3 SQLite version 3.33.0 2020-08-14 13:23:32 Enter ".help" for usage hints. sqlite> .schema CREATE TABLE depends (base text, path text, soname text, realname text); sqlite> select * from depends; bash|/bin/bash|linux-vdso.so.1 (0x00007ffefddf3000)| bash|/bin/bash|libreadline.so.7|/lib/libreadline.so.7 bash|/bin/bash|libdl.so.2|/lib/libdl.so.2 bash|/bin/bash|libc.so.6|/lib/libc.so.6 bash|/bin/bash|libncursesw.so.6|/lib/libncursesw.so.6 bash|/bin/bash|/lib/ld-linux-x86-64.so.2|/lib/ld-linux-x86-64.so.2 btrfs|/bin/btrfs|linux-vdso.so.1 (0x00007fffd5889000)| btrfs|/bin/btrfs|libuuid.so.1|/lib/libuuid.so.1 ....
query_depends.pyによる依存関係の検索
get_
$ ./query_depends.py -h Usage: ./query_depends.py [-b name] [-p path ] [-s soname ] [-r realname] ./depends.sql3 データベースを用いて、ライブラリの依存関係を調べる。 -b name: name が含まれるELF形式のバイナリファイルが使う共有ライブラリを表示する -b cat とすれば /bin/cat だけでなく、bdftruncate や fc-cat もマッチする -b の場合、パス名は見ずに、ファイル名のみで検索する -p name: 検索の際にパス名も含めてマッチさせる。-p /bin/cat とすれば /bin/cat のみにマッチする -s soname: 共有ライブラリ soname を利用するバイナリファイルを表示する -s libgtk libgtk-3.so.0 や libgtk-x11-2.0.so もマッチする -s の場合、パス名は見ずに、共有ライブラリ名のみで検索する -r realname: 検索の際にライブラリのパス名も含める
先に見たように、
"-b"と"-p"はバイナリが参照している共有ライブラリを調べる、
"-s"はデータベースの"soname"、
$ ./query_depends.py -s libavcodec | cat -n 1 libavcodec.so.57 used by these binaries 2 ffmpeg3.4(/usr/bin/ffmpeg3.4) 3 ffplay3.4(/usr/bin/ffplay3.4) 4 ffprobe3.4(/usr/bin/ffprobe3.4) 5 ffserver3.4(/usr/bin/ffserver3.4) 6 libavdevice.so.57.10.100(/usr/lib/libavdevice.so.57.10.100) 7 libavfilter.so.6.107.100(/usr/lib/libavfilter.so.6.107.100) 8 libavformat.so.57.83.100(/usr/lib/libavformat.so.57.83.100) 9 libavcodec.so.58 used by these binaries 10 ffmpeg(/usr/bin/ffmpeg) 11 ffplay(/usr/bin/ffplay) 12 ffprobe(/usr/bin/ffprobe) 13 mencoder(/usr/bin/mencoder) 14 mplayer(/usr/bin/mplayer) 15 mpv(/usr/bin/mpv) 16 libavdevice.so.58.10.100(/usr/lib/libavdevice.so.58.10.100) 17 libavfilter.so.7.85.100(/usr/lib/libavfilter.so.7.85.100) 18 libavformat.so.58.45.100(/usr/lib/libavformat.so.58.45.100) 19 libmpv.so.1.109.0(/usr/lib/libmpv.so.1.109.0) .... 30 libvdpau_avcodec_plugin.so(/usr/lib/vlc/plugins/vdpau/libvdpau_avcodec_plugin.so)
libavcodecはFFmpeg-3.
Plamo-7.
一方、
すなわち、
一方、
このパッケージが提供するlibMagickWand共有ライブラリの使用状況は、
$ ./query_depends.py -s libMagicKWand | cat -n 1 libMagickWand-6.Q16HDRI.so.6 used by these binaries 2 emacs-26.2(/usr/bin/emacs-26.2) 3 inkscape(/usr/bin/inkscape) 4 inkview(/usr/bin/inkview) 5 libMagick++-6.Q16HDRI.so.8.0.0(/usr/lib/libMagick++-6.Q16HDRI.so.8.0.0) 6 libinkscape_base.so(/usr/lib/inkscape/libinkscape_base.so) ... 9 libMagickWand-7.Q16HDRI.so.9 used by these binaries 10 magick(/usr/bin/magick) 11 libMagick++-7.Q16HDRI.so.5.0.0(/usr/lib/libMagick++-7.Q16HDRI.so.5.0.0)
この結果を見ると、
手元では、
get_
そのような場合、
次回は、