[a@b ~]$ cd compile_test/
[a@b compile_test]$ ls
foo1.c foo1.o foo2.c foo2.o foo2.s hello hello.c hello.o libfoo.so
[a@b compile_test]$ readelf -s hello.o
Symbol table '.symtab' contains 10 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000000 0 FILE LOCAL DEFAULT ABS hello.c
2: 00000000 0 SECTION LOCAL DEFAULT 1
3: 00000000 0 SECTION LOCAL DEFAULT 3
4: 00000000 0 SECTION LOCAL DEFAULT 4
5: 00000000 0 SECTION LOCAL DEFAULT 6
6: 00000000 0 SECTION LOCAL DEFAULT 5
7: 00000000 38 FUNC GLOBAL DEFAULT 1 main
8: 00000000 0 NOTYPE GLOBAL DEFAULT UND foo2
9: 00000000 0 NOTYPE GLOBAL DEFAULT UND foo2_func
[a@b compile_test]$
[a@b compile_test]$ readelf -s hello
Symbol table '.dynsym' contains 12 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
2: 00000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses
3: 00000000 0 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.0 (2)
4: 00000000 0 FUNC GLOBAL DEFAULT UND foo2_func
5: 08049754 0 NOTYPE GLOBAL DEFAULT ABS _end
6: 08049748 0 NOTYPE GLOBAL DEFAULT ABS _edata
7: 08049748 4 OBJECT GLOBAL DEFAULT 25 foo2
8: 0804859c 4 OBJECT GLOBAL DEFAULT 15 _IO_stdin_used
9: 08049748 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
10: 08048384 0 FUNC GLOBAL DEFAULT 11 _init
11: 0804857c 0 FUNC GLOBAL DEFAULT 14 _fini
Symbol table '.symtab' contains 66 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 08048134 0 SECTION LOCAL DEFAULT 1
2: 08048148 0 SECTION LOCAL DEFAULT 2
3: 08048168 0 SECTION LOCAL DEFAULT 3
4: 0804818c 0 SECTION LOCAL DEFAULT 4
5: 080481cc 0 SECTION LOCAL DEFAULT 5
6: 0804828c 0 SECTION LOCAL DEFAULT 6
7: 08048322 0 SECTION LOCAL DEFAULT 7
8: 0804833c 0 SECTION LOCAL DEFAULT 8
9: 0804835c 0 SECTION LOCAL DEFAULT 9
10: 0804836c 0 SECTION LOCAL DEFAULT 10
11: 08048384 0 SECTION LOCAL DEFAULT 11
12: 080483b4 0 SECTION LOCAL DEFAULT 12
13: 08048400 0 SECTION LOCAL DEFAULT 13
14: 0804857c 0 SECTION LOCAL DEFAULT 14
15: 08048598 0 SECTION LOCAL DEFAULT 15
16: 080485a4 0 SECTION LOCAL DEFAULT 16
17: 080485c8 0 SECTION LOCAL DEFAULT 17
18: 08049644 0 SECTION LOCAL DEFAULT 18
19: 0804964c 0 SECTION LOCAL DEFAULT 19
20: 08049654 0 SECTION LOCAL DEFAULT 20
21: 08049658 0 SECTION LOCAL DEFAULT 21
22: 08049728 0 SECTION LOCAL DEFAULT 22
23: 0804972c 0 SECTION LOCAL DEFAULT 23
24: 08049744 0 SECTION LOCAL DEFAULT 24
25: 08049748 0 SECTION LOCAL DEFAULT 25
26: 00000000 0 SECTION LOCAL DEFAULT 26
27: 00000000 0 FILE LOCAL DEFAULT ABS crtstuff.c
28: 08049644 0 OBJECT LOCAL DEFAULT 18 __CTOR_LIST__
29: 0804964c 0 OBJECT LOCAL DEFAULT 19 __DTOR_LIST__
30: 08049654 0 OBJECT LOCAL DEFAULT 20 __JCR_LIST__
31: 08048430 0 FUNC LOCAL DEFAULT 13 __do_global_dtors_aux
32: 0804974c 1 OBJECT LOCAL DEFAULT 25 completed.5972
33: 08049750 4 OBJECT LOCAL DEFAULT 25 dtor_idx.5974
34: 08048490 0 FUNC LOCAL DEFAULT 13 frame_dummy
35: 00000000 0 FILE LOCAL DEFAULT ABS crtstuff.c
36: 08049648 0 OBJECT LOCAL DEFAULT 18 __CTOR_END__
37: 08048640 0 OBJECT LOCAL DEFAULT 17 __FRAME_END__
38: 08049654 0 OBJECT LOCAL DEFAULT 20 __JCR_END__
39: 08048550 0 FUNC LOCAL DEFAULT 13 __do_global_ctors_aux
40: 00000000 0 FILE LOCAL DEFAULT ABS hello.c
41: 0804972c 0 OBJECT LOCAL DEFAULT 23 _GLOBAL_OFFSET_TABLE_
42: 08049644 0 NOTYPE LOCAL DEFAULT 18 __init_array_end
43: 08049644 0 NOTYPE LOCAL DEFAULT 18 __init_array_start
44: 08049658 0 OBJECT LOCAL DEFAULT 21 _DYNAMIC
45: 08049744 0 NOTYPE WEAK DEFAULT 24 data_start
46: 080484e0 5 FUNC GLOBAL DEFAULT 13 __libc_csu_fini
47: 08048400 0 FUNC GLOBAL DEFAULT 13 _start
48: 00000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
49: 00000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses
50: 08048598 4 OBJECT GLOBAL DEFAULT 15 _fp_hw
51: 0804857c 0 FUNC GLOBAL DEFAULT 14 _fini
52: 08049748 4 OBJECT GLOBAL DEFAULT 25 foo2
53: 00000000 0 FUNC GLOBAL DEFAULT UND __libc_start_main@@GLIBC_
54: 0804859c 4 OBJECT GLOBAL DEFAULT 15 _IO_stdin_used
55: 08049744 0 NOTYPE GLOBAL DEFAULT 24 __data_start
56: 080485a0 0 OBJECT GLOBAL HIDDEN 15 __dso_handle
57: 08049650 0 OBJECT GLOBAL HIDDEN 19 __DTOR_END__
58: 080484f0 90 FUNC GLOBAL DEFAULT 13 __libc_csu_init
59: 08049748 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
60: 00000000 0 FUNC GLOBAL DEFAULT UND foo2_func
61: 08049754 0 NOTYPE GLOBAL DEFAULT ABS _end
62: 08049748 0 NOTYPE GLOBAL DEFAULT ABS _edata
63: 0804854a 0 FUNC GLOBAL HIDDEN 13 __i686.get_pc_thunk.bx
64: 080484b4 38 FUNC GLOBAL DEFAULT 13 main
65: 08048384 0 FUNC GLOBAL DEFAULT 11 _init
[a@b compile_test]$
[a@b compile_test]$
[a@b compile_test]$ readelf -S hello
There are 30 section headers, starting at offset 0x89c:
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .interp PROGBITS 08048134 000134 000013 00 A 0 0 1
[ 2] .note.ABI-tag NOTE 08048148 000148 000020 00 A 0 0 4
[ 3] .note.gnu.build-i NOTE 08048168 000168 000024 00 A 0 0 4
[ 4] .gnu.hash GNU_HASH 0804818c 00018c 000040 04 A 5 0 4
[ 5] .dynsym DYNSYM 080481cc 0001cc 0000c0 10 A 6 1 4
[ 6] .dynstr STRTAB 0804828c 00028c 000096 00 A 0 0 1
[ 7] .gnu.version VERSYM 08048322 000322 000018 02 A 5 0 2
[ 8] .gnu.version_r VERNEED 0804833c 00033c 000020 00 A 6 1 4
[ 9] .rel.dyn REL 0804835c 00035c 000010 08 A 5 0 4
[10] .rel.plt REL 0804836c 00036c 000018 08 A 5 12 4
[11] .init PROGBITS 08048384 000384 000030 00 AX 0 0 4
[12] .plt PROGBITS 080483b4 0003b4 000040 04 AX 0 0 4
[13] .text PROGBITS 08048400 000400 00017c 00 AX 0 0 16
[14] .fini PROGBITS 0804857c 00057c 00001c 00 AX 0 0 4
[15] .rodata PROGBITS 08048598 000598 00000c 00 A 0 0 4
[16] .eh_frame_hdr PROGBITS 080485a4 0005a4 000024 00 A 0 0 4
[17] .eh_frame PROGBITS 080485c8 0005c8 00007c 00 A 0 0 4
[18] .ctors PROGBITS 08049644 000644 000008 00 WA 0 0 4
[19] .dtors PROGBITS 0804964c 00064c 000008 00 WA 0 0 4
[20] .jcr PROGBITS 08049654 000654 000004 00 WA 0 0 4
[21] .dynamic DYNAMIC 08049658 000658 0000d0 08 WA 6 0 4
[22] .got PROGBITS 08049728 000728 000004 04 WA 0 0 4
[23] .got.plt PROGBITS 0804972c 00072c 000018 04 WA 0 0 4
[24] .data PROGBITS 08049744 000744 000004 00 WA 0 0 4
[25] .bss NOBITS 08049748 000748 00000c 00 WA 0 0 4
[26] .comment PROGBITS 00000000 000748 000058 01 MS 0 0 1
[27] .shstrtab STRTAB 00000000 0007a0 0000fc 00 0 0 1
[28] .symtab SYMTAB 00000000 000d4c 000420 10 29 45 4
[29] .strtab STRTAB 00000000 00116c 0001fa 00 0 0 1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings)
I (info), L (link order), G (group), x (unknown)
O (extra OS processing required) o (OS specific), p (processor specific)
[a@b compile_test]$
[a@b compile_test]$
[a@b compile_test]$ readelf -r hello
Relocation section '.rel.dyn' at offset 0x35c contains 2 entries:
Offset Info Type Sym.Value Sym. Name
08049728 00000106 R_386_GLOB_DAT 00000000 __gmon_start__
08049748 00000705 R_386_COPY 08049748 foo2
Relocation section '.rel.plt' at offset 0x36c contains 3 entries:
Offset Info Type Sym.Value Sym. Name
08049738 00000107 R_386_JUMP_SLOT 00000000 __gmon_start__
0804973c 00000307 R_386_JUMP_SLOT 00000000 __libc_start_main
08049740 00000407 R_386_JUMP_SLOT 00000000 foo2_func
[a@b compile_test]$
[a@b compile_test]$ nm hello | grep foo
08049748 B foo2
U foo2_func
[a@b compile_test]$ readelf -S libfoo.so
There are 27 section headers, starting at offset 0x738:
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .note.gnu.build-i NOTE 000000d4 0000d4 000024 00 A 0 0 4
[ 2] .gnu.hash GNU_HASH 000000f8 0000f8 000048 04 A 3 0 4
[ 3] .dynsym DYNSYM 00000140 000140 0000d0 10 A 4 1 4
[ 4] .dynstr STRTAB 00000210 000210 00008b 00 A 0 0 1
[ 5] .gnu.version VERSYM 0000029c 00029c 00001a 02 A 3 0 2
[ 6] .gnu.version_r VERNEED 000002b8 0002b8 000020 00 A 4 1 4
[ 7] .rel.dyn REL 000002d8 0002d8 000030 08 A 3 0 4
[ 8] .rel.plt REL 00000308 000308 000010 08 A 3 10 4
[ 9] .init PROGBITS 00000318 000318 000030 00 AX 0 0 4
[10] .plt PROGBITS 00000348 000348 000030 04 AX 0 0 4
[11] .text PROGBITS 00000380 000380 000158 00 AX 0 0 16
[12] .fini PROGBITS 000004d8 0004d8 00001c 00 AX 0 0 4
[13] .eh_frame PROGBITS 000004f4 0004f4 000004 00 A 0 0 4
[14] .ctors PROGBITS 000014f8 0004f8 000008 00 WA 0 0 4
[15] .dtors PROGBITS 00001500 000500 000008 00 WA 0 0 4
[16] .jcr PROGBITS 00001508 000508 000004 00 WA 0 0 4
[17] .data.rel.ro PROGBITS 0000150c 00050c 000004 00 WA 0 0 4
[18] .dynamic DYNAMIC 00001510 000510 0000c0 08 WA 4 0 4
[19] .got PROGBITS 000015d0 0005d0 000014 04 WA 0 0 4
[20] .got.plt PROGBITS 000015e4 0005e4 000014 04 WA 0 0 4
[21] .data PROGBITS 000015f8 0005f8 000008 00 WA 0 0 4
[22] .bss NOBITS 00001600 000600 000008 00 WA 0 0 4
[23] .comment PROGBITS 00000000 000600 000058 01 MS 0 0 1
[24] .shstrtab STRTAB 00000000 000658 0000dd 00 0 0 1
[25] .symtab SYMTAB 00000000 000b70 000390 10 26 45 4
[26] .strtab STRTAB 00000000 000f00 0001a7 00 0 0 1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings)
I (info), L (link order), G (group), x (unknown)
O (extra OS processing required) o (OS specific), p (processor specific)
[a@b compile_test]$ readelf -S /lib/
Display all 234 possibilities? (y or n)
[a@b compile_test]$ readelf -S /lib/ld-
ld-2.12.so ld-linux.so.2 ld-lsb.so.3
[a@b compile_test]$ readelf -S /lib/ld-2.12.so
There are 30 section headers, starting at offset 0x227d8:
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .note.gnu.build-i NOTE 004e7114 000114 000024 00 A 0 0 4
[ 2] .hash HASH 004e7138 000138 0000bc 04 A 4 0 4
[ 3] .gnu.hash GNU_HASH 004e71f4 0001f4 0000e0 04 A 4 0 4
[ 4] .dynsym DYNSYM 004e72d4 0002d4 0001c0 10 A 5 1 4
[ 5] .dynstr STRTAB 004e7494 000494 00017e 00 A 0 0 1
[ 6] .gnu.version VERSYM 004e7612 000612 000038 02 A 4 0 2
[ 7] .gnu.version_d VERDEF 004e764c 00064c 0000c8 00 A 5 6 4
[ 8] .rel.dyn REL 004e7714 000714 000078 08 A 4 0 4
[ 9] .rel.plt REL 004e778c 00078c 000030 08 A 4 10 4
[10] .plt PROGBITS 004e77bc 0007bc 000070 04 AX 0 0 4
[11] .text PROGBITS 004e7830 000830 017b2f 00 AX 0 0 16
[12] __libc_freeres_fn PROGBITS 004ff360 018360 00055a 00 AX 0 0 16
[13] .rodata PROGBITS 004ff8c0 0188c0 0029e0 00 A 0 0 32
[14] .stapsdt.base PROGBITS 005022a0 01b2a0 000001 00 A 0 0 1
[15] .eh_frame_hdr PROGBITS 005022a4 01b2a4 0005ec 00 A 0 0 4
[16] .eh_frame PROGBITS 00502890 01b890 002110 00 A 0 0 4
[17] .data.rel.ro PROGBITS 00505c60 01dc60 00029c 00 WA 0 0 32
[18] .dynamic DYNAMIC 00505efc 01defc 0000c8 08 WA 5 0 4
[19] .got PROGBITS 00505fc4 01dfc4 000030 04 WA 0 0 4
[20] .data PROGBITS 00506000 01e000 000834 00 WA 0 0 32
[21] __libc_subfreeres PROGBITS 00506834 01e834 000004 00 WA 0 0 4
[22] .bss NOBITS 00506838 01e838 0000c0 00 WA 0 0 8
[23] .note.stapsdt NOTE 00000000 01e838 0002b4 00 0 0 4
[24] .comment PROGBITS 00000000 01eaec 00002c 01 MS 0 0 1
[25] .symtab SYMTAB 00000000 01eb18 001ec0 10 26 465 4
[26] .strtab STRTAB 00000000 0209d8 001744 00 0 0 1
[27] .gnu_debuglink PROGBITS 00000000 02211c 000018 00 0 0 4
[28] .gnu.prelink_undo PROGBITS 00000000 022134 000574 01 0 0 4
[29] .shstrtab STRTAB 00000000 0226a8 00012c 00 0 0 1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings)
I (info), L (link order), G (group), x (unknown)
O (extra OS processing required) o (OS specific), p (processor specific)
[a@b compile_test]$
[a@b compile_test]$ readelf -r libfoo.so
Relocation section '.rel.dyn' at offset 0x2d8 contains 6 entries:
Offset Info Type Sym.Value Sym. Name
0000150c 00000008 R_386_RELATIVE
000015d0 00000106 R_386_GLOB_DAT 00000000 __gmon_start__
000015d4 00000206 R_386_GLOB_DAT 00000000 _Jv_RegisterClasses
000015d8 00000906 R_386_GLOB_DAT 000015fc foo2
000015dc 00000306 R_386_GLOB_DAT 00000000 __cxa_finalize
000015e0 00000706 R_386_GLOB_DAT 000015f8 foo1
Relocation section '.rel.plt' at offset 0x308 contains 2 entries:
Offset Info Type Sym.Value Sym. Name
000015f0 00000107 R_386_JUMP_SLOT 00000000 __gmon_start__
000015f4 00000307 R_386_JUMP_SLOT 00000000 __cxa_finalize