3

ELF ファイル内のいくつかのオブジェクトを調査しており、その目的で readelf を使用しています。

この readelf のサンプルは、列 3 のオブジェクトのサイズ (バイト) を示しています。

大きなオブジェクトでは、readelf は 10 進数ではなく 16 進数で出力します。

これにより、サイズの並べ替えの試みが中断されます。(ソートでは 16 進値は無視されます)

Num:    Value  Size Type    Bind   Vis      Ndx Name
1369: 808ec6e8  2048 OBJECT  LOCAL  DEFAULT   26 _ZN2cvL12NNDeltaTab_iE
1370: 8086e6e8 0x20000 OBJECT  LOCAL  DEFAULT   26 _ZN2cvL13Lanczos4Tab_iE

次のように、すべての 16 進数を 10 進数に変換してみました。

readelf -sW target.elf | perl -pe 's/(0x)?[0-9a-f]{5,}/hex $&/ge' | sort -k 3 -n -r 

そして得た

  1369: 2156840680  2048 OBJECT  LOCAL  DEFAULT   26 _ZN2cvL12NNDeltaTab_iE
  1370: 2156324584 131072 OBJECT  LOCAL  DEFAULT   26 _ZN2cvL13Lanczos4Tab_iE

サイズ列 (3) は dec に変換されます。これは適切です。

しかし、列2も12月に変換されますが、これは悪いことです..

私はこれを見つけました:

perl -lane '$F[1]=~tr/A/B/;print join("\t", @F)' file

から

特定の列に限定された検索と置換のワンライナー

しかし、これら2つのコマンドを組み合わせることができないようです。

3 列目だけを 10 進数に変換するにはどうすればよいですか?

ありがとう

4

2 に答える 2