2012-12-20 2 views
0

ELF 디버깅 파일이 있어야합니다.elf 파일을 dwarf에서 ​​stabs 형식으로 변환하려면 어떻게해야합니까?

파일에 DWARF 형식이 사용됩니다.

어떻게 깁스 형식으로 변환 할 수 있습니까?

이렇게하는 데 도움이되는 도구 나 방법이 있습니까?

감사합니다.

+1

가장 쉬운 방법은 "올바른"디버그 형식을 사용하도록 소스를 다시 컴파일하는 것입니다. -gstabs 이것이 가능하지 않다면 디버거 (gdb?)를 컴파일하여 두 형식을 모두 이해할 수있는 옵션이 있습니까? –

답변

1
http://opensource.apple.com/source/binutils/binutils-20/src/binutils/wrstabs.c 

은 ELF 바이너리에서 찌르는 정보를 추출하는 코드에 대한 링크입니다. 그것은 길고 지저분하고 문제가 많습니다.

실제로 미리 만들어진 변환기가 없습니다. 위 코드와 같은 것을 리버스 엔지니어링해야합니다. Mats가 제안 했으므로 다시 컴파일을 고려하십시오.

그러나 난 뒤에 코드가없는 레거시 바이너리가 있다고 생각합니다. DWARF 포맷은 약 10 년 이상 전에 Sun이 한 일이었습니다. 이것은 Sun의 IMO에 대한 일종의 플롭이었습니다.

이것은 바이너리를 어셈블러로 리버스 엔지니어링하는 링크입니다.

http://www.linuxsa.org.au/meetings/reveng-0.2.pdf 

이론적으로 어셈블러가 생기면 새로운 바이너리를 빌드 할 수 있습니다. 문제는; 엔트리 포인트를 extern 함수에 넣고 링커와 올바르게 작동하게합니다. DWARF와 관련된 내용도 제거해야합니다. 그런 다음 연결 찌르기를 다시 컴파일하십시오.

그러나 설명서가있는 http://dwarf.freestandards.org 사이트는 영구적으로 오프라인 상태입니다.

귀하의 하드웨어를 알고 있다면 그것은 내 대답을 많이 도왔을 것입니다.

+2

DWARF는 Linux x86-64 아키텍처의 표준 디버그 형식입니다. 나는 32 비트 리눅스가 그것을 사용하고 있음을 확신한다. –

+2

DWARF 표준 웹 페이지는 http://www.dwarfstd.org/ fwiw입니다. 다른 포스터와 동의하십시오 - DWARF를 읽고 찌르는 것을 쓰는 무언가를 쓰는 것은 가능하지만 그런 도구가 없다는 것을 알고 있으며 많은 작업이 될 것입니다. stabs는 디버그 정보의 원시적이고 비효율적 인 표현입니다. DWARF를 찔러 내리는 것은 좋은 생각이 아니므로,이 길로 인도하는 요구 사항을 다시 검토해 볼 것입니다. –

+0

@mats - Solaris (sparc 및 x86)는 ELF이고 DWARF도 있습니다. –

관련 문제