作爲一個新手侏儒,我試過的代碼提交in this page(代碼here),但是當我啓動它,我得到:DWARF信息似乎是錯誤的DW_AT_high_pc用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)。 探索tracedprog
與objdump
它給出對於do_stuff
功能:
<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
似乎不正確的我,因爲它只有兩個字節長。
供您參考,我編tracedprog
有:
$> gcc -g tracedprog2.c -o tracedprog
編輯這似乎是一個gcc
問題,因爲有另一臺機器上沒有問題。我正在使用gcc 4.8.2
。