Ubuntu 22.04ディストリビューションで利用可能なさまざまな共有オブジェクトに関連するデバッグシンボルを見つけようとしています。
libssl3
たとえば、多くの削除された共有オブジェクトに付属するamd64 debパッケージ(バージョン3.0.2-0ubuntu1)を考えてみましょう。その一つはですlibcrypto.so.3
。私の目標は、このELFバイナリのデバッグシンボルを見つけることです。
そのため、Ubuntuランチパッドlibssl3-dbgsymからデバッグシンボルdebパッケージをダウンロードしました。協会)それを抽出します。私が得るものは次のファイルです。
.
├── .build-id
│ ├── 03
│ │ └── 29a35e5964f90f62f114339b04d01fdd279556.debug
│ ├── 1a
│ │ └── eb4e8099c7be4e1f6d3a19f67f984b7f8c84f7.debug
│ ├── 4c
│ │ └── 87efff7047c22be230cee0e46e02d5381176e4.debug
│ ├── 58
│ │ └── 379515d1cca66570c1f35281cea7801b09123b.debug
│ ├── 64
│ │ └── 6eb686ac2bdfec84a935d8e87aee7b31003764.debug
│ └── 76
│ └── 600b49bcd7f52abe72e54bca385de322f175a2.debug
└── .dwz
└── x86_64-linux-gnu
├── libssl3.debug
このデバッグファイルはどのELFバイナリに対応していますか.build-id
?libcrypto.so.3
または、対応するデバッグシンボルがないのはなぜですかlibssl.so.3
?
多くのデバッグパッケージが自動的に作成され、空になる可能性があることを読みました。ただし、*.debug
これらのファイルが何であるか、シンボルの使用方法(さまざまな共有オブジェクトで利用可能な場合)を理解できる場合は役立ちます。
答え1
デバッグファイルは、一致するビルドIDを持つバイナリに対応します。ビルドIDを見つけるにはeu-readelf
(パッケージでelfutils
)を使用してください。たとえば、私のシステムでは以下を使用します。
$ eu-readelf -n /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
Note section [ 1] '.note.gnu.build-id' of 36 bytes at offset 0x238:
Owner Data size Type
GNU 20 GNU_BUILD_ID
Build ID: 0c53740d5c74564b10ffdc9b15aa30961bd7221d
ビルドIDの最初の2桁の16進数は下のディレクトリにマップされ、.build-id
残りは特定の.debug
ファイルにマップされます。