Linux readelf 使用不同的数字系统(十六进制和十进制)显示对象大小
Linux readelf shows object sizes with different numeral system (Hex and Dec)
我正在调查 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
尺码栏(3)翻译成dec,很好,
但是第 2 列也被翻译成 dec,这很糟糕..
我发现了这个:
perl -lane '$F[1]=~tr/A/B/;print join("\t", @F)' file
来自
但我似乎无法组合这两个命令。
如何只将第 3 列翻译成 dec?
谢谢
试试这个:
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,}
只转换以0x
:
开头的序列
perl -pe's/0x([0-9a-f]+)/hex /ge'
仅转换以 0x
:
开头的字段
perl -pe's/(?<!\S)0x([0-9a-f]+)/hex /ge'
仅转换以 0x
:
开头的第三个字段
perl -pe's/^(?:\S+\s+){2}\K0x([0-9a-f]+)/hex /e'
我正在调查 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
尺码栏(3)翻译成dec,很好,
但是第 2 列也被翻译成 dec,这很糟糕..
我发现了这个:
perl -lane '$F[1]=~tr/A/B/;print join("\t", @F)' file
来自
但我似乎无法组合这两个命令。
如何只将第 3 列翻译成 dec?
谢谢
试试这个:
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,}
只转换以0x
:
perl -pe's/0x([0-9a-f]+)/hex /ge'
仅转换以 0x
:
perl -pe's/(?<!\S)0x([0-9a-f]+)/hex /ge'
仅转换以 0x
:
perl -pe's/^(?:\S+\s+){2}\K0x([0-9a-f]+)/hex /e'