【问题标题】:Linux readelf shows object sizes with different numeral system (Hex and Dec)Linux readelf 显示具有不同数字系统(十六进制和十进制)的对象大小
【发布时间】:2019-03-07 02:45:31
【问题描述】:

我正在调查 ELF 文件中的一些对象,并为此目的使用 readelf。

这个 readelf 示例显示了第 3 列对象的大小(字节),

在大型对象上,readelf 以十六进制而不是十进制打印,

这打破了我的尺寸排序尝试。 (排序忽略十六进制值)

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

size列(3)翻译成dec,就好了,

但第 2 列也被翻译成 dec,这很糟糕..

我发现了这个:

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

来自

find-and-replace-confined-to-a-specific-column-one-liner

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

如何仅将第 3 列翻译成 dec?

谢谢

【问题讨论】:

    标签: regex linux perl elf readelf


    【解决方案1】:

    只转换以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'
    

    【讨论】:

    • 有效!谢谢!添加完整的命令以便其他人也可以使用:查找 50 个占用空间的顶级对象/文件,将 HEX 大小更改为 dec,对它们进行排序和分解:readelf -sW target.elf | perl -pe 's/0x[0-9a-f]+/hex $&/ge' |排序 -k 3 -n -r | c++过滤器|头 -n 50
    【解决方案2】:

    试试这个:

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

    仅适用于第三列。

    正则表达式:

     (?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,} 
    

    【讨论】:

      猜你喜欢
      • 2021-02-07
      • 2020-01-10
      • 1970-01-01
      • 2014-03-11
      • 1970-01-01
      • 2011-12-09
      • 2017-10-20
      • 1970-01-01
      • 2015-04-19
      相关资源
      最近更新 更多