CLOVER🍀

That was when it all began.

curlをお題に、アプリケヌションが䟝存する共有ラむブラリヌ → 共有ラむブラリヌの定矩 → 共有ラむブラリヌの関数呌び出しを確認しおみるldd、nm、readelf、objdump、ltraceなど

これは、なにをしたくお曞いたもの

アプリケヌションをトレヌスしおいお、アプリケヌションが䟝存しおいる共有ラむブラリヌや関数呌び出しのトレヌスを
しおみたいなず思いたしお。

時々䜿っおいるコマンドも出おきたすが、゚ントリヌずしおたずめたいず思いたす。

お題

curlコマンドをお題に、OpenSSLぞの䟝存を確認し、関数呌び出しのトレヌスしおみたいず思いたす。

環境

今回の環境はこちら。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04.2 LTS
Release:        24.04
Codename:       noble


$ uname -srvmpio
Linux 6.8.0-53-generic #55-Ubuntu SMP PREEMPT_DYNAMIC Fri Jan 17 15:37:52 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

確認しおみる

では、curlをお題に確認しおみたしょう。

curlが䟝存しおいる共有ラむブラリヌを調べる

これはlddコマンドで行いたす。

$ ldd --version
ldd (Ubuntu GLIBC 2.39-0ubuntu8.4) 2.39
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
䜜者 Roland McGrath および Ulrich Drepper。

Ubuntu Manpage: ldd - 共有オブジェクトへの依存関係を表示する

確認。

$ ldd $(which curl)

察象の実行ファむルパスを指定する必芁があるので、今回はwhichず組み合わせおいたす。

結果はこちらです。

        linux-vdso.so.1 (0x00007ffd6df90000)
        libcurl.so.4 => /lib/x86_64-linux-gnu/libcurl.so.4 (0x000072b3256af000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x000072b325693000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x000072b325400000)
        libnghttp2.so.14 => /lib/x86_64-linux-gnu/libnghttp2.so.14 (0x000072b325668000)
        libidn2.so.0 => /lib/x86_64-linux-gnu/libidn2.so.0 (0x000072b325646000)
        librtmp.so.1 => /lib/x86_64-linux-gnu/librtmp.so.1 (0x000072b325626000)
        libssh.so.4 => /lib/x86_64-linux-gnu/libssh.so.4 (0x000072b32538f000)
        libpsl.so.5 => /lib/x86_64-linux-gnu/libpsl.so.5 (0x000072b325612000)
        libssl.so.3 => /lib/x86_64-linux-gnu/libssl.so.3 (0x000072b3252e5000)
        libcrypto.so.3 => /lib/x86_64-linux-gnu/libcrypto.so.3 (0x000072b324c00000)
        libgssapi_krb5.so.2 => /lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x000072b325291000)
        libldap.so.2 => /lib/x86_64-linux-gnu/libldap.so.2 (0x000072b325232000)
        liblber.so.2 => /lib/x86_64-linux-gnu/liblber.so.2 (0x000072b325222000)
        libzstd.so.1 => /lib/x86_64-linux-gnu/libzstd.so.1 (0x000072b325168000)
        libbrotlidec.so.1 => /lib/x86_64-linux-gnu/libbrotlidec.so.1 (0x000072b32515a000)
        /lib64/ld-linux-x86-64.so.2 (0x000072b3257c2000)
        libunistring.so.5 => /lib/x86_64-linux-gnu/libunistring.so.5 (0x000072b324a53000)
        libgnutls.so.30 => /lib/x86_64-linux-gnu/libgnutls.so.30 (0x000072b324859000)
        libhogweed.so.6 => /lib/x86_64-linux-gnu/libhogweed.so.6 (0x000072b324811000)
        libnettle.so.8 => /lib/x86_64-linux-gnu/libnettle.so.8 (0x000072b3247bc000)
        libgmp.so.10 => /lib/x86_64-linux-gnu/libgmp.so.10 (0x000072b324738000)
        libkrb5.so.3 => /lib/x86_64-linux-gnu/libkrb5.so.3 (0x000072b32466f000)
        libk5crypto.so.3 => /lib/x86_64-linux-gnu/libk5crypto.so.3 (0x000072b32512a000)
        libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x000072b325124000)
        libkrb5support.so.0 => /lib/x86_64-linux-gnu/libkrb5support.so.0 (0x000072b325117000)
        libsasl2.so.2 => /lib/x86_64-linux-gnu/libsasl2.so.2 (0x000072b324655000)
        libbrotlicommon.so.1 => /lib/x86_64-linux-gnu/libbrotlicommon.so.1 (0x000072b324632000)
        libp11-kit.so.0 => /lib/x86_64-linux-gnu/libp11-kit.so.0 (0x000072b32448e000)
        libtasn1.so.6 => /lib/x86_64-linux-gnu/libtasn1.so.6 (0x000072b324478000)
        libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x000072b324471000)
        libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x000072b32445e000)
        libffi.so.8 => /lib/x86_64-linux-gnu/libffi.so.8 (0x000072b324452000)

OpenSSLのラむブラリヌはこちらですね。

$ ldd $(which curl) | grep ssl
        libssl.so.3 => /lib/x86_64-linux-gnu/libssl.so.3 (0x00007707038b3000)

結果がちょっず長くなりたすが、確実に知るには-vオプションを䜿うのがよいかもしれたせん。

$ ldd -v $(which curl)
        linux-vdso.so.1 (0x00007ffed0f4c000)
        libcurl.so.4 => /lib/x86_64-linux-gnu/libcurl.so.4 (0x000078e2a9f9c000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x000078e2a9f80000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x000078e2a9c00000)
        libnghttp2.so.14 => /lib/x86_64-linux-gnu/libnghttp2.so.14 (0x000078e2a9f55000)
        libidn2.so.0 => /lib/x86_64-linux-gnu/libidn2.so.0 (0x000078e2a9f33000)
        librtmp.so.1 => /lib/x86_64-linux-gnu/librtmp.so.1 (0x000078e2a9f13000)
        libssh.so.4 => /lib/x86_64-linux-gnu/libssh.so.4 (0x000078e2a9ea2000)
        libpsl.so.5 => /lib/x86_64-linux-gnu/libpsl.so.5 (0x000078e2a9e8e000)
        libssl.so.3 => /lib/x86_64-linux-gnu/libssl.so.3 (0x000078e2a9b56000)
        libcrypto.so.3 => /lib/x86_64-linux-gnu/libcrypto.so.3 (0x000078e2a9600000)
        libgssapi_krb5.so.2 => /lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x000078e2a9e3a000)
        libldap.so.2 => /lib/x86_64-linux-gnu/libldap.so.2 (0x000078e2a95a3000)
        liblber.so.2 => /lib/x86_64-linux-gnu/liblber.so.2 (0x000078e2a9e28000)
        libzstd.so.1 => /lib/x86_64-linux-gnu/libzstd.so.1 (0x000078e2a94e9000)
        libbrotlidec.so.1 => /lib/x86_64-linux-gnu/libbrotlidec.so.1 (0x000078e2a9e1a000)
        /lib64/ld-linux-x86-64.so.2 (0x000078e2aa0af000)
        libunistring.so.5 => /lib/x86_64-linux-gnu/libunistring.so.5 (0x000078e2a933c000)
        libgnutls.so.30 => /lib/x86_64-linux-gnu/libgnutls.so.30 (0x000078e2a9142000)
        libhogweed.so.6 => /lib/x86_64-linux-gnu/libhogweed.so.6 (0x000078e2a90fa000)
        libnettle.so.8 => /lib/x86_64-linux-gnu/libnettle.so.8 (0x000078e2a90a5000)
        libgmp.so.10 => /lib/x86_64-linux-gnu/libgmp.so.10 (0x000078e2a9021000)
        libkrb5.so.3 => /lib/x86_64-linux-gnu/libkrb5.so.3 (0x000078e2a8f58000)
        libk5crypto.so.3 => /lib/x86_64-linux-gnu/libk5crypto.so.3 (0x000078e2a9b2a000)
        libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x000078e2a9b24000)
        libkrb5support.so.0 => /lib/x86_64-linux-gnu/libkrb5support.so.0 (0x000078e2a9b17000)
        libsasl2.so.2 => /lib/x86_64-linux-gnu/libsasl2.so.2 (0x000078e2a8f3e000)
        libbrotlicommon.so.1 => /lib/x86_64-linux-gnu/libbrotlicommon.so.1 (0x000078e2a8f1b000)
        libp11-kit.so.0 => /lib/x86_64-linux-gnu/libp11-kit.so.0 (0x000078e2a8d77000)
        libtasn1.so.6 => /lib/x86_64-linux-gnu/libtasn1.so.6 (0x000078e2a8d61000)
        libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x000078e2a8d5a000)
        libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x000078e2a8d47000)
        libffi.so.8 => /lib/x86_64-linux-gnu/libffi.so.8 (0x000078e2a8d3b000)

        Version information:
        /usr/bin/curl:
                libcurl.so.4 (CURL_OPENSSL_4) => /lib/x86_64-linux-gnu/libcurl.so.4
                libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.15) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.7) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.17) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.33) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.34) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
        /lib/x86_64-linux-gnu/libcurl.so.4:
                liblber.so.2 (OPENLDAP_2.200) => /lib/x86_64-linux-gnu/liblber.so.2
                libgssapi_krb5.so.2 (gssapi_krb5_2_MIT) => /lib/x86_64-linux-gnu/libgssapi_krb5.so.2
                libidn2.so.0 (IDN2_0.0.0) => /lib/x86_64-linux-gnu/libidn2.so.0
                libssh.so.4 (LIBSSH_4_8_1) => /lib/x86_64-linux-gnu/libssh.so.4
                libssh.so.4 (LIBSSH_4_5_0) => /lib/x86_64-linux-gnu/libssh.so.4
                libldap.so.2 (OPENLDAP_2.200) => /lib/x86_64-linux-gnu/libldap.so.2
                libcrypto.so.3 (OPENSSL_3.0.0) => /lib/x86_64-linux-gnu/libcrypto.so.3
                libssl.so.3 (OPENSSL_3.0.0) => /lib/x86_64-linux-gnu/libssl.so.3
                libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.15) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.7) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.17) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.33) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.34) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
        /lib/x86_64-linux-gnu/libz.so.1:
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
        /lib/x86_64-linux-gnu/libc.so.6:
                ld-linux-x86-64.so.2 (GLIBC_2.2.5) => /lib64/ld-linux-x86-64.so.2
                ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
                ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
        /lib/x86_64-linux-gnu/libnghttp2.so.14:
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.17) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
        /lib/x86_64-linux-gnu/libidn2.so.0:
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
        /lib/x86_64-linux-gnu/librtmp.so.1:
                libhogweed.so.6 (HOGWEED_6) => /lib/x86_64-linux-gnu/libhogweed.so.6
                libnettle.so.8 (NETTLE_8) => /lib/x86_64-linux-gnu/libnettle.so.8
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.7) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
                libgnutls.so.30 (GNUTLS_3_4) => /lib/x86_64-linux-gnu/libgnutls.so.30
        /lib/x86_64-linux-gnu/libssh.so.4:
                ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
                libcrypto.so.3 (OPENSSL_3.0.0) => /lib/x86_64-linux-gnu/libcrypto.so.3
                libc.so.6 (GLIBC_2.33) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.15) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.27) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.17) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.7) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.25) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
                libgssapi_krb5.so.2 (gssapi_krb5_2_MIT) => /lib/x86_64-linux-gnu/libgssapi_krb5.so.2
        /lib/x86_64-linux-gnu/libpsl.so.5:
                libidn2.so.0 (IDN2_0.0.0) => /lib/x86_64-linux-gnu/libidn2.so.0
                libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.33) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
        /lib/x86_64-linux-gnu/libssl.so.3:
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.33) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
                libcrypto.so.3 (OPENSSL_3.0.3) => /lib/x86_64-linux-gnu/libcrypto.so.3
                libcrypto.so.3 (OPENSSL_3.0.0) => /lib/x86_64-linux-gnu/libcrypto.so.3
        /lib/x86_64-linux-gnu/libcrypto.so.3:
                libc.so.6 (GLIBC_2.15) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.38) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.25) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.33) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.7) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.17) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.16) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.34) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
        /lib/x86_64-linux-gnu/libgssapi_krb5.so.2:
                libk5crypto.so.3 (k5crypto_3_MIT) => /lib/x86_64-linux-gnu/libk5crypto.so.3
                libkrb5support.so.0 (krb5support_0_MIT) => /lib/x86_64-linux-gnu/libkrb5support.so.0
                libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.27) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.25) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.38) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.8) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.33) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.17) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
                libkrb5.so.3 (krb5_3_MIT) => /lib/x86_64-linux-gnu/libkrb5.so.3
        /lib/x86_64-linux-gnu/libldap.so.2:
                libsasl2.so.2 (SASL2) => /lib/x86_64-linux-gnu/libsasl2.so.2
                liblber.so.2 (OPENLDAP_2.200) => /lib/x86_64-linux-gnu/liblber.so.2
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.38) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.28) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.33) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.17) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.22) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.2) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.34) => /lib/x86_64-linux-gnu/libc.so.6
                libgnutls.so.30 (GNUTLS_3_4) => /lib/x86_64-linux-gnu/libgnutls.so.30
        /lib/x86_64-linux-gnu/liblber.so.2:
                libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.28) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.38) => /lib/x86_64-linux-gnu/libc.so.6
        /lib/x86_64-linux-gnu/libzstd.so.1:
                libc.so.6 (GLIBC_2.34) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.2) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
        /lib/x86_64-linux-gnu/libbrotlidec.so.1:
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
        /lib/x86_64-linux-gnu/libunistring.so.5:
                libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.32) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.34) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
        /lib/x86_64-linux-gnu/libgnutls.so.30:
                ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
                libidn2.so.0 (IDN2_0.0.0) => /lib/x86_64-linux-gnu/libidn2.so.0
                libhogweed.so.6 (HOGWEED_6) => /lib/x86_64-linux-gnu/libhogweed.so.6
                libc.so.6 (GLIBC_2.8) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.38) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.7) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.25) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.2) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.33) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.17) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.34) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
                libtasn1.so.6 (LIBTASN1_0_3) => /lib/x86_64-linux-gnu/libtasn1.so.6
                libp11-kit.so.0 (LIBP11_KIT_1.0) => /lib/x86_64-linux-gnu/libp11-kit.so.0
                libnettle.so.8 (NETTLE_8) => /lib/x86_64-linux-gnu/libnettle.so.8
        /lib/x86_64-linux-gnu/libhogweed.so.6:
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
                libnettle.so.8 (NETTLE_8) => /lib/x86_64-linux-gnu/libnettle.so.8
        /lib/x86_64-linux-gnu/libnettle.so.8:
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.17) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
        /lib/x86_64-linux-gnu/libgmp.so.10:
                libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.38) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.7) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
        /lib/x86_64-linux-gnu/libkrb5.so.3:
                libresolv.so.2 (GLIBC_2.9) => /lib/x86_64-linux-gnu/libresolv.so.2
                libk5crypto.so.3 (k5crypto_3_MIT) => /lib/x86_64-linux-gnu/libk5crypto.so.3
                libkrb5support.so.0 (krb5support_0_MIT) => /lib/x86_64-linux-gnu/libkrb5support.so.0
                libkeyutils.so.1 (KEYUTILS_1.0) => /lib/x86_64-linux-gnu/libkeyutils.so.1
                libkeyutils.so.1 (KEYUTILS_1.5) => /lib/x86_64-linux-gnu/libkeyutils.so.1
                libkeyutils.so.1 (KEYUTILS_0.3) => /lib/x86_64-linux-gnu/libkeyutils.so.1
                libc.so.6 (GLIBC_2.25) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.7) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.33) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.8) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.34) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.16) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.17) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.38) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6
        /lib/x86_64-linux-gnu/libk5crypto.so.3:
                libkrb5support.so.0 (krb5support_0_MIT) => /lib/x86_64-linux-gnu/libkrb5support.so.0
                libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.33) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.25) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.38) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
        /lib/x86_64-linux-gnu/libcom_err.so.2:
                ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.17) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.38) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
        /lib/x86_64-linux-gnu/libkrb5support.so.0:
                libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.25) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.38) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.8) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.34) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
        /lib/x86_64-linux-gnu/libsasl2.so.2:
                libcrypto.so.3 (OPENSSL_3.0.0) => /lib/x86_64-linux-gnu/libcrypto.so.3
                libc.so.6 (GLIBC_2.38) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.15) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.34) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
        /lib/x86_64-linux-gnu/libbrotlicommon.so.1:
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
        /lib/x86_64-linux-gnu/libp11-kit.so.0:
                ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
                libffi.so.8 (LIBFFI_CLOSURE_8.0) => /lib/x86_64-linux-gnu/libffi.so.8
                libffi.so.8 (LIBFFI_BASE_8.0) => /lib/x86_64-linux-gnu/libffi.so.8
                libc.so.6 (GLIBC_2.16) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.6) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.33) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.8) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.26) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.2) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.34) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.38) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
        /lib/x86_64-linux-gnu/libtasn1.so.6:
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.38) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
        /lib/x86_64-linux-gnu/libkeyutils.so.1:
                libc.so.6 (GLIBC_2.7) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
        /lib/x86_64-linux-gnu/libresolv.so.2:
                libc.so.6 (GLIBC_2.36) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_ABI_DT_RELR) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.34) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_PRIVATE) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6
        /lib/x86_64-linux-gnu/libffi.so.8:
                libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.27) => /lib/x86_64-linux-gnu/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
OpenSSLの共有ラむブラリヌに定矩されおいるシンボルを確認する

次は、共有ラむブラリヌに定矩されおいるシンボルを確認したす。

これにはnm、readelf、objdumpコマンドを䜿いたす。いずれもbinutilsに含たれおいるので、パッケヌゞをむンストヌル。

$ sudo apt install binutils

たずはnmコマンドから。

Ubuntu Manpage: nm - list symbols from object files

-Dたたは--dynamicオプションを぀けるこずで動的シンボルを衚瀺できたす。

$ nm -D /lib/x86_64-linux-gnu/libssl.so.3

たくさん出力されるこずが倚いず思うので、ドキュメントを芋た方がいいんでしょうね 。

絞り蟌んだ結果。

$ nm -D /lib/x86_64-linux-gnu/libssl.so.3 | grep SSL_read
00000000000365b0 T SSL_read@@OPENSSL_3.0.0
000000000003a2f0 T SSL_read_early_data@@OPENSSL_3.0.0
0000000000036640 T SSL_read_ex@@OPENSSL_3.0.0

readelf。

Ubuntu Manpage: readelf - display information about ELF files

-s、--syms、--symbolsオプションでシンボルを衚瀺するのですが、衚瀺幅が足りないので-Wたたは--wideオプションを
䞀緒に䜿うこずになりたす。

$ readelf -sW /lib/x86_64-linux-gnu/libssl.so.3

結果はやっぱり長いので、䞀郚だけ。

$ readelf -sW /lib/x86_64-linux-gnu/libssl.so.3 | grep SSL_read
   673: 00000000000365b0   135 FUNC    GLOBAL DEFAULT   15 SSL_read@@OPENSSL_3.0.0
   777: 000000000003a2f0   342 FUNC    GLOBAL DEFAULT   15 SSL_read_early_data@@OPENSSL_3.0.0
   826: 0000000000036640    30 FUNC    GLOBAL DEFAULT   15 SSL_read_ex@@OPENSSL_3.0.0

objdump。

Ubuntu Manpage: objdump - display information from object files

-Tたたは--dynamic-symsオプションで動的シンボルを衚瀺できたす。

$ objdump -T /lib/x86_64-linux-gnu/libssl.so.3

結果䞀郚。

$ objdump -T /lib/x86_64-linux-gnu/libssl.so.3 | grep SSL_read
00000000000365b0 g    DF .text  0000000000000087  OPENSSL_3.0.0 SSL_read
000000000003a2f0 g    DF .text  0000000000000156  OPENSSL_3.0.0 SSL_read_early_data
0000000000036640 g    DF .text  000000000000001e  OPENSSL_3.0.0 SSL_read_ex
curlのOpenSSL関数の呌び出しをトレヌスする

最埌は共有ラむブラリヌの関数呌び出しをトレヌスしたす。これにはltraceを䜿いたす。

Ubuntu Manpage: ltrace - A library call tracer

ちなみに、システムコヌルの堎合はstraceを䜿いたす。

Javaアプリケーションをstraceで追う - CLOVER🍀

Ubuntu Manpage: strace - trace system calls and signals

こんな感じでアプリケヌションの実行時にltrace経由で呌び出すず、libcのものしかトレヌスしないようなので

$ ltrace curl https://kazuhira-r.hatenablog.com

-lたたは--libraryで共有ラむブラリヌを指定するか

$ ltrace -l 'libssl.so.*' curl https://kazuhira-r.hatenablog.com 2>&1 | less

-eで関数を指定するこずになりたす。

$ ltrace -e 'SSL_*' curl https://kazuhira-r.hatenablog.com

どちらもglobパタヌンが䜿えたす。

$ ltrace -l 'libssl.so.*' curl https://kazuhira-r.hatenablog.com 2>&1 | grep SSL_read | head -n 10
libcurl.so.4->SSL_read(0x5d0b1d96a300, 0x5d0b1da5a7e0, 0x4000, 0x77dc57e05780) = 0xffffffff
libcurl.so.4->SSL_read(0x5d0b1d96a300, 0x5d0b1da5a7e0, 0x4000, 0x77dc57e05780 <unfinished ...>
<... SSL_read resumed> )                         = 40
libcurl.so.4->SSL_read(0x5d0b1d96a300, 0x5d0b1da5a7e0, 0x4000, 0x77dc57e05780) = 9
libcurl.so.4->SSL_read(0x5d0b1d96a300, 0x5d0b1da5a7e0, 0x4000, 0x77dc57e05780) = 0xffffffff
libcurl.so.4->SSL_read(0x5d0b1d96a300, 0x5d0b1da5a7e0, 0x4000, 0x77dc57e05780) = 0xffffffff
libcurl.so.4->SSL_read(0x5d0b1d96a300, 0x5d0b1da5a7e0, 0x4000, 0x77dc57e05780) = 0xffffffff
libcurl.so.4->SSL_read(0x5d0b1d96a300, 0x5d0b1da5a7e0, 0x4000, 0x77dc57e05780) = 0x4000
libcurl.so.4->SSL_read(0x5d0b1d96a300, 0x5d0b1da5e810, 0x4000, 0x77dc57e05780) = 0xffffffff
libcurl.so.4->SSL_read(0x5d0b1d96a300, 0x5d0b1da5e810, 0x4000, 0x77dc57e05780) = 0x4000


$ ltrace -e 'SSL_*' curl https://kazuhira-r.hatenablog.com 2>&1 | grep SSL_read | head -n 10
libcurl.so.4->SSL_read(0x6551335b1300, 0x6551336a17e0, 0x4000, 0x7529a2805780) = 0xffffffff
libcurl.so.4->SSL_read(0x6551335b1300, 0x6551336a17e0, 0x4000, 0x7529a2805780 <unfinished ...>
<... SSL_read resumed> )                         = 40
libcurl.so.4->SSL_read(0x6551335b1300, 0x6551336a17e0, 0x4000, 0x7529a2805780) = 9
libcurl.so.4->SSL_read(0x6551335b1300, 0x6551336a17e0, 0x4000, 0x7529a2805780) = 0xffffffff
libcurl.so.4->SSL_read(0x6551335b1300, 0x6551336a17e0, 0x4000, 0x7529a2805780) = 0xffffffff
libcurl.so.4->SSL_read(0x6551335b1300, 0x6551336a17e0, 0x4000, 0x7529a2805780) = 0x4000
libcurl.so.4->SSL_read(0x6551335b1300, 0x6551336a5810, 0x4000, 0x7529a2805780) = 0xffffffff
libcurl.so.4->SSL_read(0x6551335b1300, 0x6551336a5810, 0x4000, 0x7529a2805780) = 0xffffffff
libcurl.so.4->SSL_read(0x6551335b1300, 0x6551336a5810, 0x4000, 0x7529a2805780) = 0xffffffff

よく䜿いそうなオプションはこのあたりでしょうか。

  • -e 
 トレヌスする関数を指定する。耇数回曞いた堎合はORになる
  • -l 
 トレヌスする共有ラむブラリヌを指定する。耇数回曞いた堎合はORになる
  • -f 
 トレヌス察象のアプリケヌションがforkたたはcloneで子プロセスを䜜成しおも、その子プロセスも含めおアタッチする
  • -t 
 トレヌスの各行の先頭に時刻を远加するtを増やすずもっず现かい時間が衚瀺される
  • -p 
 指定したPIDのプロセスに察しおトレヌスを行う管理者暩限が必芁

ただ、-pはシンボル解決埌だず意味がなさそうです 。できれば起動時に仕蟌んでおきたい感じですね。
こういう時はstraceに頌った方がいいのかもしれたせん。

おわりに

curlをお題に、アプリケヌションが䟝存する共有ラむブラリヌ → 共有ラむブラリヌの定矩 → 共有ラむブラリヌの
関数呌び出しを確認しおみたした。

あんたり共有ラむブラリヌをトレヌスするこずがなかったので、いろいろず勉匷になりたした。

straceを䜿うこずはあったのですが、起動埌のプロセスに途䞭からアタッチする堎合はちょっず泚意が必芁なこずも
わかりたしたし 。

自分の堎合はそうそう䜿うこずはないず思うのですが、こういうのを調べる時に頭の隅に入れおおくずよいかなず思いたした。