Arch Linux에서 gdb 디버깅을 위한 디버그 기호는 실제로 무엇을 의미합니까?

Arch Linux에서 gdb 디버깅을 위한 디버그 기호는 실제로 무엇을 의미합니까?

PS 영어는 제 모국어가 아닙니다. 오타가 있는 점 양해해 주시기 바랍니다.

나는 (아마도) 기본적인 주요 아이디어를 이해합니다상징ELF 파일에서동적 링크에서.

교과서를 참조하면 .so 또는 이와 유사한 것에 동적으로 링크해야 하는 경우 링크 대상의 함수 이름이 필요합니다(예를 들어 함수에 대해서만 이야기하는 경우). 그런 다음 로더는 대상의 실제 위치를 찾기 위해 작업을 수행합니다. 그런 다음 다른 작업을 수행하여 로드합니다. 함수의 이름은 우리가 기호라고 부를 수 있는 것의 이름입니다.

하지만,디버깅, 다음은 나를 혼란스럽게 합니다.

Arch Linux에 pwndbg(GDB용 플러그인)를 설치하려고 했지만 몇 가지 문제가 발생했습니다. 다음 지침을 따르세요. [1] [2], 문제를 해결했습니다. 그러나 솔루션이 어떻게 작동하는지 잘 이해하지 못합니다.

플러그인 작성자이기도 한 Solution Provider의 포스터에 따르면 Arch의 glibc에는 "디버그 기호"가 없으므로 수동으로 설치해야 하지만 Ubuntu의 glibc에는 "디버그 기호"가 있으므로 설치할 필요가 없습니다. 수동으로.

그래서 여기에 저를 혼란스럽게 만드는 몇 가지 질문이 있습니다.

  1. 내가 왜 그럴 수 있지?설치하다glibc와 같은 lib 기호입니다. .so(ELF) 파일에 기호가 없고 그 안에 기호를 넣은 경우. ELF는 상대 파일 오프셋을 기반으로 하기 때문에 ELF 파일 형식이 손상될 수 있습니다. 그렇지 않습니까? 그래서 무엇을 했나요?설치하다실제로는? 아니면 이 맥락에서 "상징"은 실제로 무엇을 의미합니까?

  2. gcc -g("gcc -g는 GDB 디버거에서 사용할 디버깅 정보를 생성합니다") 실제로 생성되는 것은 무엇입니까? (내가 설치한 것) 동일한가요? "디버깅 정보를 생성"해야 한다면 소스 코드가 필요합니다. 그렇죠?

답변1

  1. 많은 배포판에서 (더반, Ubuntu, Fedora 등이 있지만 내가 아는 한 Arch는 그렇지 않습니다.해당 위키 페이지), 프로그램은 디버그 정보(아래 참조)로 빌드되었지만 디버그 정보는탁월한별도의 파일로. 이러한 개별 파일은 디버그 패키지 및/또는 디버그 정보 서버를 통해 제공되며 디버깅에 도움이 되는 파일과 함께 설치할 수 있습니다.

  2. gcc -g저장된 정보를 통해 기본적으로 디버거는 컴파일러에서 생성된 바이너리 코드에서 소스 코드로 돌아갈 수 있습니다. 이 정보를 사용하여 디버거는 실행 파일이나 메모리의 위치를 ​​해당 소스 코드로 변환할 수 있습니다. 예를 들어 변수 위치는 관련 선언에 연결될 수 있고 실행 코드 내의 위치는 관련 소스 코드 줄에 연결될 수 있습니다.

마이클 J. 열망DWARF 디버깅 형식 소개디버깅 정보의 기능에 대한 좋은 설명입니다. 당신은 또한 볼 수 있습니다/usr/lib/.build-id/dir의 목적은 무엇입니까?

관련 정보