sto cercando di ottenere l'indirizzo caricato di un binario ELF, but dlopen
doesn't lavoro come previsto:Ottenere indirizzo caricato di un binario ELF, dlopen non sta funzionando come previsto
void *elf = (char *)dlopen (0, RTLD_NOW);
printf ("%p\n", elf);
sleep (100);
Esso stampa 0xb772d918
, ma da quello che /proc/1510/maps
dice, che non punta all'indirizzo carico del dlfn
binario, ma il ld-2.15.so
,
08048000-08049000 r-xp 00000000 fc:00 1379 /root/dlfn
08049000-0804a000 r--p 00000000 fc:00 1379 /root/dlfn
0804a000-0804b000 rw-p 00001000 fc:00 1379 /root/dlfn
b7550000-b7552000 rw-p 00000000 00:00 0
b7552000-b76f5000 r-xp 00000000 fc:00 9275 /lib/i386-linux-gnu/libc-2.15.so
b76f5000-b76f7000 r--p 001a3000 fc:00 9275 /lib/i386-linux-gnu/libc-2.15.so
b76f7000-b76f8000 rw-p 001a5000 fc:00 9275 /lib/i386-linux-gnu/libc-2.15.so
b76f8000-b76fb000 rw-p 00000000 00:00 0
b76fb000-b76fe000 r-xp 00000000 fc:00 9305 /lib/i386-linux-gnu/libdl-2.15.so
b76fe000-b76ff000 r--p 00002000 fc:00 9305 /lib/i386-linux-gnu/libdl-2.15.so
b76ff000-b7700000 rw-p 00003000 fc:00 9305 /lib/i386-linux-gnu/libdl-2.15.so
b7708000-b770b000 rw-p 00000000 00:00 0
b770b000-b770c000 r-xp 00000000 00:00 0 [vdso]
b770c000-b772c000 r-xp 00000000 fc:00 9299 /lib/i386-linux-gnu/ld-2.15.so
b772c000-b772d000 r--p 0001f000 fc:00 9299 /lib/i386-linux-gnu/ld-2.15.so
b772d000-b772e000 rw-p 00020000 fc:00 9299 /lib/i386-linux-gnu/ld-2.15.so
bfc34000-bfc55000 rw-p 00000000 00:00 0 [stack]
Quindi, altro che l'analisi /proc/pid/maps
, c'è un modo per recuperare l'indirizzo caricato di un binario ELF? (0x0848000 in questo caso)
Interessante ... che non è stato nemmeno menzionato in 'dlopen (3)'. Grazie! – daisy
Molto utile. Se si desidera eseguire questa operazione su Android, dl_iterate_phdr è disponibile dalla versione della piattaforma 21 in poi. – sheltond