2014-01-30 5 views
0

DWARF 2 debug_line 섹션이 어떻게 인코딩되는지 알아 내려고합니다. 표준 종이 (http://www.dwarfstd.org/doc/dwarf-2.0.0.pdf)는 나에게 많은 도움이되지 않습니다 다음과 같은 방법 난 정말 이해가 안 :debug_line 섹션을 디코딩하는 방법은 무엇입니까?

.4byte .debug_line 
    .4byte 0x736e7502, 0x656e6769, 0x6e692064, 0x04070074 

뭔가를 나타냅니다. 거기에 "unsigned int"문자열이 있지만 그 앞에 0x02 값이 있습니다. 그게 무엇을 나타내는가? 심지어 표준 열거 형/DWARF 2 상수와 헤더를 정의 찾을 수 없습니다 .. 누군가 DWARF 2 debug_line 구문 분석하는 방법에 대한 몇 가지 빛을 비켜 줄 수 있습니까?

답변

0

DWARF 표준이 도움이되지 않는 경우 .debug_line 구문 분석을 구현하는 일부 소스 코드를 읽는 것이 좋습니다. 어쩌면 그것은 더 명확 할 것입니다; 아니면 DWARF 표준과 함께 읽는 것이 도움이 될 것입니다. 이 정보에는 많은 독자가 있습니다. 상대적으로 간단한 것은 GNU binutils에있다. 소스를 잡고 "bfd/dwarf2.c"에서 .debug_line 디코딩을 찾으십시오.

표준 헤더의 경우 binutils에는 dwarf2.h도 포함됩니다. 하지만 당신은 맞습니다. 표준 헤더가 있다고 생각하지 않습니다. 오히려 다양한 프로젝트 (binutils, elfutils, libdwarf, 아마도 다른 것들)는 일반적으로 DWARF 스펙에서 파생 된 자체 헤더를 만듭니다.

3

나는 꽤 오래된 질문이지만, .debug_line 섹션을 읽는 방법을 찾고있는 사람이 있을지도 모른다. 나는 readelf 그것을 분석 할 수 있다는 것을 발견

readelf --debug-dump=line <path/to/binary> 

(또는)

readelf --debug-dump=decodedline <path/to/binary> 

먼저 엘프 바이너리에 표시되는대로 .debug_line 내 컨텐츠를 해석이다. 두 번째는 특히 .debug_line 단위로 주어진 여러 레코드 간의 참조와 관련하여 모든 데이터를보다 구조화 된보기로 작성합니다.

또한 도구 dwarfdump (Ubuntu repos에서 사용 가능)이 있지만이를 확인할 기회가 없었습니다.