前回、
また、
その際触れたように、
そのため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_
そのような場合、
次回は、
