Estou tentando encontrar símbolos de depuração associados a vários objetos compartilhados fornecidos na distribuição Ubuntu 22.04.
Por exemplo, vamos considerar o pacote amd64 deb: libssl3
(versão 3.0.2-0ubuntu1) que envia vários objetos compartilhados removidos. Um deles é libcrypto.so.3
. Meu objetivo é descobrir símbolos de depuração para este binário ELF.
Então baixei o pacote deb de símbolos de depuração - libssl3-dbgsym do launchpad do Ubuntu ( Link ) e extraí-o. O que recebo são os seguintes arquivos:
.
├── .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
A quais binários ELF esses arquivos de depuração .build-id
correspondem? Por que não há símbolos de depuração que correspondam a, digamos libcrypto.so.3
ou libssl.so.3
?
Eu li que muitos desses pacotes de depuração são gerados automaticamente e podem estar vazios. No entanto, será útil se eu conseguir entender o que *.debug
são esses arquivos e como usar esses símbolos, se é que eles podem ser usados para os vários objetos compartilhados.
Os arquivos de depuração correspondem ao binário com um ID de compilação correspondente. Para encontrar um ID de compilação, use
eu-readelf
(noelfutils
pacote); por exemplo, no meu sistema,Os primeiros dois dígitos hexadecimais do ID de compilação são mapeados para um diretório em , o restante para um arquivo
.build-id
específico ..debug