objdump -t
というファイルのシンボルテーブル を調べることによって、オブジェクトファイル内のシンボルの可視性を確認できます。シンボルがhidden
の場合、そのレコードの6番目のフィールドに.hidden
というラベルが付けられ、 の名前が続きます。その可視性がdefault
であれば、そのようなラベルはなく、 第6フィールドが名前(通常の場合)になります。たとえば、次のように
foo.cの(デフォルトの可視性)
#include <stdio.h>
void foo(void)
{
puts("foo");
}
コンパイルおよび調べる:
$ gcc -c -fPIC foo.c
$ objdump -t foo.o | grep foo
foo.o: file format elf64-x86-64
0000000000000000 l df *ABS* 0000000000000000 foo.c
0000000000000000 g F .text 0000000000000013 foo
のfoo.c(隠された可視性)
#include <stdio.h>
__attribute__ ((visibility ("hidden"))) void foo(void)
{
puts("foo");
}
を再コンパイルして再調査する:
$ gcc -c -fPIC foo.c
$ objdump -t foo.o | grep foo
foo.o: file format elf64-x86-64
0000000000000000 l df *ABS* 0000000000000000 foo.c
0000000000000000 g F .text 0000000000000013 .hidden foo
'nm'コマンドを試しましたか? – codeforester