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 進数に変換するにはどうすればよいですか?
ありがとう