2017-03-12 2 views
3

바이너리 실행 파일에 링크 된 디버그 기호 파일의 이름 및/또는 경로를 확인하는 방법은 무엇입니까? 바이너리 실행 파일에 링크 된 디버그 기호 파일의 이름 및/또는 경로를 확인하는 방법은 무엇입니까?

은이 같은 한 가정 :
objcopy --only-keep-debug foo foo.dbg 
objcopy --strip-debug foo 
objcopy --add-gnu-debuglink=foo.dbg foo 

지금 foo.dbg는 foo에는 해당 gdb를 사용할 수 foo.dbg 할 수있는 링크가, 디버그 기호가 있습니다. gdb는 foo에서 심볼 파일을 알 수 있으므로 실제로 gdb를 실행하지 않고도 어떻게 알 수 있습니까?

실행 파일의 이름을 foo에서 xyz로 변경하더라도 여전히 gdb가 foo.dbg의 심볼을로드하므로 binaryname.extension과 같지 않으며 확장자는 선택 사항입니다.

답변

2

실제로 gdb를 실행하지 않고도 어떻게 알 수 있습니까?

이러한 명령 중 하나는 당신을 말할 것이다 :

readelf -x.gnu_debuglink foo 
objdump -sj.gnu_debuglink foo 

objcopy --add-gnu-debuglink은 단순히 .gnu_debuglink 주어진 경로를 포함하는 섹션 및 디버그 파일의 체크섬을 추가합니다.

자세한 정보 here.

+0

감사합니다. – Sumit

+0

체크섬 기술이 어떤 용도로 사용되는지 말해 주시겠습니까? MD5 또는 SHA를 의미하므로 비교할 수 있고 올바른 디버그 정보 파일을 가지고 있는지 확인하십시오. – Sumit

+0

@ 수밋 그것은 CRC32입니다. 여기에 문서가 있습니다. https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html –

관련 문제