Linux Readelf显示具有不同数字系统(HEX和DEC)的对象大小



我正在研究精灵文件中的某些对象,并为此目的使用readelf。

此readelf的样本显示了第3列上的对象的大小(字节)

在大型物体上,在十六进制而不是dec中读取

这打破了我的大小分类尝试。(排序忽略十六进制值)

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

我尝试将所有十六进制翻译成这样的十月:

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列被翻译成DEC,这是不好的。

我找到了这个:

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

来自

查找和重新安装到特定的柱柱

,但我似乎无法结合这两个命令。

如何仅将第3列转换为DEC?

谢谢

仅转换以0x开头的序列:

perl -pe's/0x([0-9a-f]+)/hex $1/ge'

仅转换以0x开头的字段:

perl -pe's/(?<!S)0x([0-9a-f]+)/hex $1/ge'

仅在0x开头时转换第三个字段:

perl -pe's/^(?:S+s+){2}K0x([0-9a-f]+)/hex $1/e'

尝试以下:

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

仅在第三列上工作。

REGEX:

 (?m)                          # Multi-line mode
 ^                             # BOL
 (?: S+ [ ]+ ){2}             # First 2 columns
 K                            # Disregard columns up to here
                               # Third column only
 ( 0x )?                       # (1)
 [0-9a-f]{5,} 

相关内容

  • 没有找到相关文章

最新更新