Title: Sai Rahul Reddy P,
1Linkers Loaders
- Sai Rahul Reddy P,
- M.Tech 2nd year,
- SIT, IIT Kharagpur.
2Basics
- Compiler in Action
- gcc foo.c bar.c o a.out
a.out fully linked executable
3(No Transcript)
4What is Linker ?
- Combines multiple relocatable object files
- Produces fully linked executable directly
loadable in memory - How?
- Symbol resolution associating one symbol
definition with each symbol reference - Relocation relocating different sections of
input relocatable files
5Linkers vs. Loaders
Linkers and loaders perform various related but
conceptually different tasks Program Loading
This refers to copying a program image from hard
disk to the main memory in order to put the
program in a ready-to-run state. In some cases,
program loading also might involve allocating
storage space or mapping virtual addresses to
disk pages. Relocation Compilers and assemblers
generate the object code for each input module
with a starting address of zero. Relocation is
the process of assigning load addresses to
different parts of the program by merging all
sections of the same type into one section. The
code and data section also are adjusted so they
point to the correct runtime addresses. Symbol
Resolution A program is made up of multiple
subprograms reference of one subprogram to
another is made through symbols. A linker's job
is to resolve the reference by noting the
symbol's location and patching the caller's
object code.
6Symbol Resolution
- Global symbols defined by the module and
referenced by other modules. All non-static
functions and global variables fall in this
category. - Global symbols referenced by the input module but
defined elsewhere. All functions and variables
with extern declaration fall in this category. - Local symbols defined and referenced exclusively
by the input module. All static functions and
static variables fall here. - Linker Resolves the symbols using the following
rules - Multiple strong symbols are not allowed.
- Given a single strong symbol and multiple weak
symbols, choose the strong symbol. - Given multiple weak symbols, choose any of the
weak symbols.
7Linking
8Linking
9Object files
Sections Idx Name Size VMA
LMA File off Algn 0 .text
0000003e 00000000 00000000 00000034 22
CONTENTS, ALLOC, LOAD, RELOC,
READONLY, CODE 1 .data 00000006
00000000 00000000 00000074 22
CONTENTS, ALLOC, LOAD, DATA 2 .bss
00000000 00000000 00000000 0000007c 22
ALLOC 3 .rodata 00000003
00000000 00000000 0000007c 20
CONTENTS, ALLOC, LOAD, READONLY, DATA SYMBOL
TABLE 00000000 l df ABS 00000000
file1.c 00000000 l d .text 00000000 00000000
l d .data 00000000 00000000 l d .bss
00000000 00000000 l d .rodata
00000000 00000000 l d .note.GNU-stack
00000000 00000000 l d .comment
00000000 00000000 g O .data 00000006
a 00000000 g F .text 00000023 main 00000000
UND 00000000 bar 00000023 g F .text
0000001b baz 00000000 UND 00000000
printf RELOCATION RECORDS FOR .text OFFSET
TYPE VALUE 0000001d R_386_PC32
bar 00000030 R_386_32 .rodata 00000035
R_386_PC32 printf
file1.c include ltstdio.hgt char a
"Hello" extern void bar() int main()
bar() void baz(char s) printf("s",
s)
10Object files
Sections Idx Name Size VMA
LMA File off Algn 0 .text
0000002d 00000000 00000000 00000034 22
CONTENTS, ALLOC, LOAD, RELOC,
READONLY, CODE 1 .data 00000000
00000000 00000000 00000064 22
CONTENTS, ALLOC, LOAD, DATA 2 .bss
00000006 00000000 00000000 00000064 22
ALLOC 3 .note.GNU-stack 00000000
00000000 00000000 00000064 20
CONTENTS, READONLY 4 .comment 00000031
00000000 00000000 00000064 20
CONTENTS, READONLY SYMBOL TABLE 00000000 l
df ABS 00000000 file2.c 00000000 l d .text
00000000 00000000 l d .data
00000000 00000000 l d .bss
00000000 00000000 l O .bss 00000006
b 00000000 l d .note.GNU-stack
00000000 00000000 l d .comment
00000000 00000000 g F .text 0000002d
bar 00000000 UND 00000000 a 00000000
UND 00000000 strcpy 00000000
UND 00000000 baz RELOCATION RECORDS FOR
.text OFFSET TYPE
VALUE 0000000a R_386_32 a 0000000f
R_386_32 .bss 00000014 R_386_PC32
strcpy 0000001f R_386_32 .bss 00000024
R_386_PC32 baz
file2.c include ltstdio.hgt extern char
a static char b6 void bar() strcpy(b,
a) baz(b)
11Before and After Linking
080483a0 ltmaingt 80483a0 55
push ebp 80483a1 89 e5
mov esp,ebp 80483a3 83 ec
08 sub 0x8,esp 80483a6
83 e4 f0 and 0xfffffff0,esp
80483a9 b8 00 00 00 00 mov
0x0,eax 80483ae 83 c0 0f
add 0xf,eax 80483b1 83 c0 0f
add 0xf,eax 80483b4 c1 e8 04
shr 0x4,eax 80483b7 c1
e0 04 shl 0x4,eax 80483ba
29 c4 sub eax,esp
80483bc e8 1f 00 00 00 call
80483e0 ltbargt 80483c1 c9
leave 80483c2 c3
ret 080483c3 ltbazgt 80483c3 55
push ebp 80483c4 89 e5
mov esp,ebp 80483c6 83
ec 08 sub 0x8,esp 80483c9
83 ec 08 sub 0x8,esp
80483cc ff 75 08 pushl
0x8(ebp) 80483cf 68 f0 84 04 08
push 0x80484f0 80483d4 e8 ff fe ff ff
call 80482d8 ltprintf_at_pltgt 80483d9
83 c4 10 add 0x10,esp
80483dc c9 leave
80483dd c3 ret
80483de 90 nop
80483df 90 nop
00000000 ltmaingt 0 55
push ebp 1 89 e5 mov
esp,ebp 3 83 ec 08 sub
0x8,esp 6 83 e4 f0 and
0xfffffff0,esp 9 b8 00 00 00 00
mov 0x0,eax e 83 c0 0f
add 0xf,eax 11 83 c0 0f
add 0xf,eax 14 c1 e8 04
shr 0x4,eax 17 c1 e0 04
shl 0x4,eax 1a 29 c4
sub eax,esp 1c e8 fc ff ff ff
call 1d ltmain0x1dgt 21 c9
leave 22 c3
ret 00000023 ltbazgt 23 55
push ebp 24 89 e5
mov esp,ebp 26 83 ec 08
sub 0x8,esp 29 83 ec 08
sub 0x8,esp 2c ff 75 08
pushl 0x8(ebp) 2f 68 00 00 00 00
push 0x0 34 e8 fc ff ff ff call
35 ltbaz0x12gt 39 83 c4 10
add 0x10,esp 3c c9
leave 3d c3 ret
12Linking Example
080483a0 ltmaingt 80483a0 55
push ebp 80483a1 89 e5
mov esp,ebp 80483a3 83 ec
08 sub 0x8,esp 80483a6
83 e4 f0 and 0xfffffff0,esp
80483a9 b8 00 00 00 00 mov
0x0,eax 80483ae 83 c0 0f
add 0xf,eax 80483b1 83 c0 0f
add 0xf,eax 80483b4 c1 e8 04
shr 0x4,eax 80483b7 c1
e0 04 shl 0x4,eax 80483ba
29 c4 sub eax,esp
80483bc e8 1f 00 00 00 call
80483e0 ltbargt 80483c1 c9
leave 80483c2 c3
ret 080483c3 ltbazgt 80483c3 55
push ebp 80483c4 89 e5
mov esp,ebp 80483c6 83
ec 08 sub 0x8,esp 80483c9
83 ec 08 sub 0x8,esp
80483cc ff 75 08 pushl
0x8(ebp) 80483cf 68 f0 84 04 08
push 0x80484f0 80483d4 e8 ff fe ff ff
call 80482d8 ltprintf_at_pltgt 80483d9
83 c4 10 add 0x10,esp
80483dc c9 leave
80483dd c3 ret
80483de 90 nop
80483df 90 nop
file1.c include ltstdio.hgt char a
"Hello" extern void bar() int main()
bar() void baz(char s) printf("s",
s)
13Linking Example
file2.c include ltstdio.hgt extern char
a static char b6 void bar() strcpy(b,
a) baz(b)
080483e0 ltbargt 80483e0 55
push ebp 80483e1 89 e5
mov esp,ebp 80483e3 83 ec 08
sub 0x8,esp 80483e6
83 ec 08 sub 0x8,esp
80483e9 68 fc 95 04 08 push
0x80495fc 80483ee 68 08 96 04 08
push 0x8049608 80483f3 e8 f0 fe ff ff
call 80482e8 ltstrcpy_at_pltgt 80483f8
83 c4 10 add 0x10,esp
80483fb 83 ec 0c sub
0xc,esp 80483fe 68 08 96 04 08
push 0x8049608 8048403 e8 bb ff ff ff
call 80483c3 ltbazgt 8048408 83
c4 10 add 0x10,esp 804840b
c9 leave 804840c
c3 ret 804840d 90
nop 804840e 90
nop 804840f 90
nop
14Object File Formats
- .com (no relocation information. Program starts
at fixed location 0x100) - .exe format
char signature2 "MZ"// magic number short
lastsize // bytes used in last block short
nblocks // number of 512 byte blocks short
nreloc // number of relocation entries short
hdrsize // size of file header in 16 byte
paragraphs short minalloc // minimum extra
memory to allocate short maxalloc // maximum
extra memory to allocate void far sp // initial
stack pointer short checksum // ones complement
of file sum void far ip // initial instruction
pointer short relocpos // location of relocation
fixup table short noverlay // Overlay number, 0
for program char extra // extra material for
overlays, etc. void far relocs // relocation
entries, starts at relocpos
15ELF Object Format
16ELF Object Format
ELF Header char magic4 "\177ELF"// magic
number char class // address size, 1 32 bit, 2
64 bit char byteorder // 1 little-endian, 2
big-endian char hversion // header version,
always 1 char pad9 short filetype // 1
relocatable, 2 executable, 3 shared object,
4 core image short archtype // 2 SPARC, 3
x86, 4 68K, etc. int fversion // file version,
always 1 int entry // entry point if
executable int phdrpos // file position of
program header or 0 int shdrpos // file position
of section header or 0 int flags // architecture
specific flags, usually 0 short hdrsize // size
of this ELF header short phdrent // size of an
entry in program header short phdrcnt // number
of entries in program header or 0 short shdrent
// size of an entry in section header short
phdrcnt // number of entries in section header
or 0 short strsec // section number that
contains section name strings
17ELF Object Format
includeltstdio.hgt includeltmath.hgt int abc int
main() int a 25 int b
printf("Hello World f\n",sqrt(a))
Example C file considered in the following
discussion
18ELF Object Format
Sample ELF Header
19ELF Object Format
Section Header int sh_name // name, index into
the string table int sh_type // section type int
sh_flags // flag bits, below int sh_addr //
base memory address, if loadable, or zero int
sh_offset // file position of beginning of
section int sh_size // size in bytes int
sh_link // section number with related info or
zero int sh_info // more section-specific
info int sh_align // alignment granularity if
section is moved int sh_entsize // size of
entries if section is an array
20(No Transcript)
21ELF Object Format
Symbol Table int name // position of name
string in string table int value // symbol
value, section relative in reloc, // absolute in
executable int size // object or function
size char type4 // data object, function,
section, or special case file char bind4 //
local, global, or weak char other // spare short
sect // section number, ABS, COMMON or UNDEF
22Symbol table
23ELF Program Header
24Static libraries
- Problems
- Change in library requires re-linking
- Copying library contents to target program wastes
disk space and memory especially for commonly
used libraries such as the C library. - With large number of active programs considerable
amount of memory goes to storing these copies of
library functions.
Difference between filesize of static and dynamic
link executables
25Shared libraries
- The primary difference between static and shared
libraries is that shared libraries delays the
actual task of linking to runtime, where it is
performed by special dynamic linker-loader. - Rather than copying the contents of the libraries
into the target executable, the linker simply
records the name of the libraries in a list of
executable.
Example Hellosairahul_at_c1 test ldd file
libc.so.6 gt /lib/tls/libc.so.6 (0x001ae000)
/lib/ld-linux.so.2 (0x00191000)
26Shared libraries
- The dynamic linker searches libraries in the same
order as they were specified on the link line and
uses the first definition of the symbol
encountered. - Duplicate symbols normally dont occur.
- Linking processes happens at each program
invocation. To minimize the performance overhead,
shared libraries use both indirection tables and
lazy symbol binding. - That is, the location of external symbols
actually refers to table entries, which remain
unbound until the application actually needs
them. - To implement lazy symbol binding, the static
linker creates jump table known as
procedure-linking table and includes it as part
of the final executable.
27Shared library Linking
The internal structure of an executable linked
with shared libraries. External library calls
point to procedure-linking table entries, which
remain unresolved until the dynamic linker fills
them in at runtime.
28Shared library Linking
The dynamic binding of library symbols in
shared libraries malloc is bound to the C
library, and printf has not yet been used and is
bound to the dynamic linker.
29Library Loading
- Library names are never encoded with absolute
pathnames. - To locate the libraries, the dynamic linker uses
a configurable library search path. This paths
default value is normally stored in a system
configuration file such as /etc/ld.so.conf or
specified by the user in the LD_LIBRARY_PATH
environment variable. - directory traversal is relatively slow, the
loader does not look at the directories in
/etc/ld.so.conf every time it runs to find
library files, but consults a cache file instead.
Normally named /etc/ld.so.cache, this cache file
is a table that matches library names to full
pathnames. - A better solution to the library path is to embed
customized search paths in the executable itself
using special linker options such as -R or -Wl,
-rpathfor example - cc SRCS Wl,-rpath/home/beazley/libs
-L/home/beazleys/libs -lfoo
30Library loading
sairahul_at_c1 test LD_DEBUGlibs ./file
9024 find librarylibc.so.6 0 searching
9024 search cache/etc/ld.so.cache
9024 trying file/lib/tls/libc.so.6
9024 9024 9024 calling init
/lib/tls/libc.so.6 9024 9024
9024 initialize program ./file 9024
9024 9024 transferring control
./file 9024 9024 9024
calling fini /lib/tls/libc.so.6 0 9024
We can obtain detailed information about how the
dynamic linker loads libraries by setting the
LD_DEBUG environment variable to libs.
31sairahul_at_c1 test strace ./file execve("./file",
"./file", / 32 vars /)
0 uname(sys"Linux", node"c1.grid-iitkgp.com",
...) 0 brk(0)
0x9a6b000 access("/etc/ld.so.preload", R_OK)
-1 ENOENT (No such file or directory) open("/e
tc/ld.so.cache", O_RDONLY) 3 fstat64(3,
st_modeS_IFREG0644, st_size183440, ...)
0 old_mmap(NULL, 183440, PROT_READ, MAP_PRIVATE,
3, 0) 0xb7fd3000 close(3)
0 open("/lib/tls/libc.so.6", O_RDONLY)
3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\
0\3\0\1\0\0\0 /\34\000"..., 512) 512 fstat64(3,
st_modeS_IFREG0755, st_size1512400, ...)
0 old_mmap(0x1ae000, 1207532, PROT_READPROT_EXEC,
MAP_PRIVATEMAP_DENYWRITE, 3, 0)
0x1ae000 old_mmap(0x2cf000, 16384,
PROT_READPROT_WRITE, MAP_PRIVATEMAP_FIXEDMAP_DE
NYWRITE, 3, 0x120000) 0x2cf000 old_mmap(0x2d3000
, 7404, PROT_READPROT_WRITE, MAP_PRIVATEMAP_FIXE
DMAP_ANONYMOUS, -1, 0) 0x2d3000 close(3)
0 old_mmap(NULL, 4096,
PROT_READPROT_WRITE, MAP_PRIVATEMAP_ANONYMOUS,
-1, 0) 0xb7fd2000 mprotect(0x2cf000, 8192,
PROT_READ) 0 mprotect(0x1a6000, 4096,
PROT_READ) 0 set_thread_area(entry_number-
1 -gt 6, base_addr0xb7fd2940, limit1048575,
seg_32bit1, contents0, read_exec_only0,
limit_in_pages1, seg_not_present0, useable1)
0 munmap(0xb7fd3000, 183440)
0 fstat64(1, st_modeS_IFCHR0620,
st_rdevmakedev(136, 4), ...) 0 mmap2(NULL,
4096, PROT_READPROT_WRITE, MAP_PRIVATEMAP_ANONYM
OUS, -1, 0) 0xb7fff000 write(1, "Hello",
5Hello) 5 munmap(0xb7fff000,
4096) 0 exit_group(5)
?
32References
- http//www.linuxjournal.com/article/6463 (Article
on Linkers Loaders) - Linkers and Loaders by John Levine, published by
Morgan-Kauffman in October 1999, ISBN
1-55860-496-0 - Linkers and Libraries Guide from Sun
(http//docs.sun.com/app/docs?p/doc/816-1386) - Lecture slides from columbia university
(http//www1.cs.columbia.edu/sedwards/classes/200
3/w4115f/) - Beazley et. al, The inside story on shared
libraries and dynamic loading, Computing in
Science Engineering, Sep/Oct 2001. - Presser, L and White, J.R., "Linkers and
Loaders," ACM Computing Surveys, Sep 1972.
33Thank you
34sairahul_at_c1 test LD_DEBUGbindings ./file
9049 binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol _res'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol _IO_file_close' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol __morecore'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol __daylight' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol __malloc_hook'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol h_nerr' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol
__malloc_initialize_hook' GLIBC_2.0
9049 binding file /lib/tls/libc.so.6 to
/lib/ld-linux.so.2 normal symbol _r_debug'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol stdout' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol __rcmd_errstr'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol _nl_domain_bindings' GLIBC_2.0
9049 binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol
re_syntax_options' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol
argp_program_bug_address' GLIBC_2.1
9049 binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol __tzname'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol _IO_stdout_' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol
_IO_funlockfile' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol
__realloc_hook' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol _IO_stderr_'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol malloc' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol
_nl_msg_cat_cntr' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol optarg'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol loc2' GLIBC_2.0 9049 binding
file /lib/tls/libc.so.6 to /lib/tls/libc.so.6
normal symbol h_errlist' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol opterr'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol error_message_count' GLIBC_2.0
9049 binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol _environ'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol getdate_err' GLIBC_2.1 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol __environ'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol obstack_exit_failure' GLIBC_2.0
9049 binding file /lib/tls/libc.so.6 to
/lib/ld-linux.so.2 normal symbol _rtld_global'
GLIBC_PRIVATE 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol error_print_progname' GLIBC_2.0
9049 binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol
__after_morecore_hook' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol
__ctype32_toupper' GLIBC_2.2 9049
binding file /lib/tls/libc.so.6 to
/lib/ld-linux.so.2 normal symbol
_rtld_global_ro' GLIBC_PRIVATE 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol _IO_stdin_'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol __key_encryptsession_pk_LOCAL'
GLIBC_2.1 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol argp_program_version' GLIBC_2.1
9049 binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol
__ctype_toupper' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol __fpu_control'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol optind' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol _res_hconf'
GLIBC_2.2 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol stdin' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol __progname'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol loc1' GLIBC_2.0 9049 binding
file /lib/tls/libc.so.6 to /lib/tls/libc.so.6
normal symbol program_invocation_short_name'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol argp_err_exit_status' GLIBC_2.1
9049 binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol
__ctype_tolower' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol
__check_rhosts_file' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol
obstack_alloc_failed_handler' GLIBC_2.0
9049 binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol stderr'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol __key_gendes_LOCAL' GLIBC_2.1
9049 binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol optopt'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol __timezone' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol
svcauthdes_stats' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol mallwatch'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol svc_fdset' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol __curbrk'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/ld-linux.so.2 normal
symbol __libc_enable_secure' GLIBC_PRIVATE
9049 binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol
__ctype32_tolower' GLIBC_2.2 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol __free_hook'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol _null_auth' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol
error_one_per_line' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/ld-linux.so.2 normal symbol _dl_argv'
GLIBC_PRIVATE 9049 binding file
/lib/tls/libc.so.6 to ./file normal symbol
_IO_stdin_used' 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol program_invocation_name' GLIBC_2.0
9049 binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol __ctype_b'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol svc_max_pollfd' GLIBC_2.2 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol rpc_createerr'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol argp_program_version_hook' GLIBC_2.1
9049 binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol svc_pollfd'
GLIBC_2.2 9049 binding file
/lib/tls/libc.so.6 to /lib/ld-linux.so.2 normal
symbol _dl_out_of_memory' GLIBC_PRIVATE
9049 binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol
__key_decryptsession_pk_LOCAL' GLIBC_2.1
9049 binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol __ctype32_b'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol __memalign_hook' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol
__progname_full' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/ld-linux.so.2 normal symbol
__libc_stack_end' GLIBC_2.1 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol free'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol _IO_2_1_stderr_' GLIBC_2.1 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol
_IO_2_1_stdout_' GLIBC_2.1 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol
_IO_2_1_stdin_' GLIBC_2.1 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol
_Unwind_Find_FDE' GCC_3.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol malloc'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol calloc' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol realloc'
GLIBC_2.0 9049 binding file
/lib/tls/libc.so.6 to /lib/tls/libc.so.6 normal
symbol memalign' GLIBC_2.0 9049
binding file /lib/tls/libc.so.6 to
/lib/ld-linux.so.2 normal symbol
___tls_get_addr' GLIBC_2.3 9049
binding file /lib/tls/libc.so.6 to
/lib/tls/libc.so.6 normal symbol free'
GLIBC_2.0 9049 binding file
/lib/ld-linux.so.2 to /lib/ld-linux.so.2 normal
symbol _r_debug' GLIBC_2.0 9049
binding file /lib/ld-linux.so.2 to
/lib/tls/libc.so.6 normal symbol
__libc_memalign' GLIBC_2.0 9049
binding file /lib/ld-linux.so.2 to
/lib/tls/libc.so.6 normal symbol malloc'
GLIBC_2.0 9049 binding file
/lib/ld-linux.so.2 to /lib/tls/libc.so.6 normal
symbol calloc' GLIBC_2.0 9049
binding file /lib/ld-linux.so.2 to
/lib/tls/libc.so.6 normal symbol realloc'
GLIBC_2.0 9049 binding file
/lib/ld-linux.so.2 to /lib/tls/libc.so.6 normal
symbol free' GLIBC_2.0 9049 9049
calling init /lib/tls/libc.so.6 9049
9049 binding file ./file to
/lib/tls/libc.so.6 normal symbol
__libc_start_main' GLIBC_2.0 9049
9049 initialize program ./file 9049
9049 9049 transferring control
./file 9049 9049 binding file
./file to /lib/tls/libc.so.6 normal symbol
strcpy' GLIBC_2.0 9049 binding file
./file to /lib/tls/libc.so.6 normal symbol
printf' GLIBC_2.0 9049 9049
calling fini /lib/tls/libc.so.6 0 9049