PDA

View Full Version : How the dynamic loader computes the address of exported symbols




activefreeman
Jul 21, 2009, 01:43 PM
Hello, how can be calculated the address at which a exported symbol of a library will be loaded by the dynamic loader?

If I use nm to obtain the symbols of my library, I obtain the following addresses:

$nm libUsuario.dylib
libUsuario.dylib(single module):
00000fea T _GetNombre
00001004 d _Nombre
00000f9b T _SetNombre
00000f6e t __SetNombre
00000f60 t __dyld_func_lookup
00000000 t __mh_dylib_header
U _strcpy
00001000 d dyld__mach_header
00000f4c t dyld_stub_binding_helper

When I obtain the address of this symbol from the program hack_usuario linked with the dynamic library:

printf("dir: %x\n",Nombre);

I obtain:

./hack_usuario
dir: 6004

However, otool says that the _Nombre symbol will be loaded in this __DATA segment:

$otool -l hack_usuario
Load command 2
cmd LC_SEGMENT
cmdsize 192
segname __DATA
vmaddr 0x00002000
vmsize 0x00001000
fileoff 4096
filesize 4096
maxprot 0x00000007
initprot 0x00000003
nsects 2
flags 0x0
Section
sectname __data
segname __DATA
addr 0x00002000
size 0x00000014
offset 4096
align 2^2 (4)
reloff 0
nreloc 0
flags 0x00000000
reserved1 0
reserved2 0