와 DW_AT_high_pc에 대한 잘못된 것 같다, 나는 코드 (코드 here입니다) in this page를 발표하려하지만 난 그것을 실행할 때 얻을 :DWARF 정보가 난쟁이하는 초보자로서 GCC 4.8.2
$> ./dwarf_get_func_addr tracedprog
DW_TAG_subprogram: 'do_stuff'
abort() in libdwarf. No error argument, no handler.
zsh: abort (core dumped) ./dwarf_get_func_addr tracedprog
후 디버그 세션이 문제는 라인 78에서 오는 것으로 보인다 :
else if (attrcode == DW_AT_high_pc)
dwarf_formaddr(attrs[i], &highpc, 0);
문제는, attrs[i]
의 form
는 attrs[i]
(이것은 7 대신에 1로 설정 됨) 어드레스 아니다 나타낸다. do_stuff
기능을 위해, 그것은 제공 objdump
와 tracedprog
탐색 : 그것은 단지 두 개의 옥텟 길이로
<1><73>: Numéro d'abréviation: 4 (DW_TAG_subprogram)
<74> DW_AT_external : 1
<74> DW_AT_name : (chaîne indirecte, décalage: 0x55): do_stuff
<78> DW_AT_decl_file : 1
<79> DW_AT_decl_line : 4
<7a> DW_AT_prototyped : 1
<7a> DW_AT_low_pc : 0x400500
<82> DW_AT_high_pc : 0x3f
<8a> DW_AT_frame_base : 1 bloc d'octets: 9c (DW_OP_call_frame_cfa)
<8c> DW_AT_GNU_all_tail_call_sites: 1
<8c> DW_AT_sibling : <0xb9>
, DW_AT_high_pc
나에게 올바른 보이지 않는다. 다른 컴퓨터에 아무런 문제가없는 같은 gcc
문제가 될 것으로 보인다
$> gcc -g tracedprog2.c -o tracedprog
편집 : 참고로
, 내가 함께 tracedprog
를 컴파일. gcc 4.8.2
을 사용하고 있습니다.