디버깅 deb 패키지의 디버깅 기호와 연관된 공유 객체는 무엇입니까?

디버깅 deb 패키지의 디버깅 기호와 연관된 공유 객체는 무엇입니까?

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의 처음 두 자리 16진수는 아래 디렉터리에 매핑되고 .build-id나머지는 특정 .debug파일에 매핑됩니다.

관련 정보