2017-09-12 2 views
0

を使用して、すべてのプログラム機能のハイとローのPCを表示:https://github.com/eliben/code-for-blog/blob/master/2011/dwarf_get_func_addr.c は、それがhttp://eli.thegreenplace.net/2011/02/07/how-debuggers-work-part-3-debugging-information 残念ながら、低PCと高いPCのリターンにイーライBenderskyによって作られたチュートリアルから抽出され、常に同じほぼすべての関数のアドレス:私はこのコードを動作させるためにしようとしていますDWARFライブラリ

DW_TAG_subprogram: 'aFunctionName' 

low pc : 0x00000001 
high pc : 0x7f3a00000001 

objdumpの--dwarf = decodedline ./lulesh_normal >>もし一方 dump_dwarf.txtは私を与える:

File name       Line number Starting address 
lulesh.cc         1297   0x402e00 

lulesh.cc         1297   0x402e11 
lulesh.cc         1299   0x402ee4 
lulesh.cc         1300   0x402ef0 
lulesh.cc         1301   0x402ef6 
lulesh.cc         1299   0x402f00 
[...] 

それはラインとアドレスをリンクするが、実際のアドレスを見つけることはできない。 理由は何ですか?

は、あなたの助けをありがとう

答えて

1

dwarf_get_func_addr.cのコードが少なくとも一つのバグがあります。それは、すべての機能がDW_AT_low_pcDW_AT_high_pc属性があり、そしてそれが当てはまらない場合は初期化されていない値を印刷することを前提としています。

423行目でlowpc = highpc = -1;を初期化して、初期化されていない値を印刷しないようにしてください。

それ以外の場合は、lulesh_normalバイナリにアクセスすることはできません。

デバッガでreadelf -wi lulesh_normalを実行してからlist_func_in_dieを実行して、そこで読み取ったプログラムとreadelfの出力を比較してください.1対1に一致する必要があります。もしそうでなければ、あなたのバージョンlibdwarfはバグかもしれません。

関連する問題