我用 NASM创建了一个快速的x86_64 程序集文件来为 ELF 64生成四种不同的可见性类。随着readelf --symbols
我在列中获得符号可见性Vis
:DEFAULT
, INTERNAL
, HIDDEN
, PROTECTED
。
Symbol table '.symtab' contains 16 entries:
Num: Value Size Type Bind Vis Ndx Name
4: 000000000040007e 0 OBJECT GLOBAL PROTECTED 1 gdp
5: 0000000000400082 0 FUNC GLOBAL HIDDEN 2 gfh
6: 000000000040007a 0 OBJECT GLOBAL INTERNAL 1 gdi
8: 000000000040007c 0 OBJECT GLOBAL HIDDEN 1 gdh
9: 0000000000400083 0 FUNC GLOBAL PROTECTED 2 gfp
11: 0000000000400078 0 OBJECT GLOBAL DEFAULT 1 gdd
14: 0000000000400081 0 FUNC GLOBAL INTERNAL 2 gfi
15: 0000000000400080 0 FUNC GLOBAL DEFAULT 2 gfd
这些符号被编码为
- 第一个字符:
g
表示它们是GLOBAL
(NASM)——它们都是。 - 中间字符:
f
表示它们是“函数”,d
表示它们是数据 - 最后一个字符:
d
efault、内部i
、h
idden、p
rotected。
但是,使用radare我无法弄清楚如何查看readelf --symbols
显示可用的可见性。使用fs symbols; f
0x0040007e 0 obj.gdp
0x00400082 0 sym.gfh
0x0040007a 0 obj.gdi
0x0040007c 0 obj.gdh
0x00400083 0 sym.gfp
0x00400078 0 obj.gdd
0x00400081 0 sym.gfi
0x00400080 0 sym.gfd
显然,sym
是函数,obj
是数据。但是我怎样才能让雷达向我展示能见度呢?