以下の内容はhttps://kazuhira-r.hatenablog.com/entry/2025/02/11/232758より取得しました。


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を使うことはあったのですが、起動後のプロセスに途中からアタッチする場合はちょっと注意が必要なことも
わかりましたし…。

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




以上の内容はhttps://kazuhira-r.hatenablog.com/entry/2025/02/11/232758より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14