2010-03-24 2 views
13

현대 리눅스에서는 거의 모든 객체가 두 부분으로 분리되어 있습니다 (두 개의 파일). 첫 번째는 실행 파일 자체이고 두 번째는 원래 ELF에서 제거 된 디버그 기호입니다. 이러한 파일은 내가 디버깅 정보와 ELF 파일에 binarybinary.dbg을 병합 할 수 있습니다 방법only-keep-debug로 objcopy의 스트립을 뒤집는 방법?

objcopy --only-keep-debug original.elf binary.dbg 
mv original.elf binary 
objcopy --strip-debug binary 

로 만든거야? 스트라이핑되지 않은 원본 바이너리를 다시 만들고 싶습니다. 원본과 바이트 - 투 - 바이트가 될 수는 없지만, 내부에 디버그 기호가 있어야합니다.

예, 나는 약 gnu.debuglink 부분을 알고 PS하지만 (objdump를 심볼 정보를 복원 할 수 없습니다) ELF를 들어

답변

5

일부 디버거 (etnus)와 디셈 작동하지 않습니다는 elfutils 패키지라는 도구를 포함 eu-unstrip이 작업을 수행합니다. 귀하의 예제의 맥락에서 :

eu-unstrip binary binary.dbg

binary.dbg 지금은 모두 바이너리와 디버그 심볼이 있습니다. 내가 찾을 수있는 경우 설명서에 대한 참조를 포함 할 것입니다 ...

+0

문서가 있습니다 : http://www.linuxfromscratch.org/blfs/view/svn/general/elfutils.html "*'eu- 스트립 된 파일을 별도의 기호 및 디버그 정보와 결합합니다. * "이 파일은 홈페이지 https://fedorahosted.org/elfutils/이며 소스 https://git.fedorahosted.org/cgit/elfutils.git/tree/입니다. src/unstrip.c "분리 된 파일을 별도의 기호 및 디버그 정보와 결합하십시오. Copyright (C) 2007-2012, 2014, 2015 Red Hat, Inc ... Roland McGrath" "program.bin"이 정상적으로 제거 된 ELF와 "program.dbg"가 디버그 정보 만 가지고 있다면, 어떻게'eu-unstrip'을 시작하고 어떤 파일을 바꿔야합니까? – osgx

+3

내 용도에 따라 이진 코드를 디버그 기호로 병합합니다. program.dbg와 program.bin이 있으면 'eu-unstrip program.bin program.dbg'는 bin을 dbg 파일에 병합합니다. 매개 변수를 반대로 가져 오면 오류가 발생합니다. – lyngvi

+0

나는 elfutils에 액세스 할 수 없지만 binutils 만 액세스 할 수 있습니다. objcopy --add-section 또는 이와 비슷한 방법으로 가능합니까? – sunil

관련 문제