2012-11-07 6 views
5

Ho bisogno di implementare i ganci per le syscalls dlsym() e dlopen(). Per chiamare l'originale dlsym() dal gancio, ho bisogno di ottenere l'indirizzo di questo syscall. Cerco di ottenere l'indirizzo nella funzione di libreria-così-libreria. Ma sto ricevendo solo l'indirizzo della funzione di hook. Ho provato a specificare come gestore come RTLD_DEFAULT, così come RTLD_NEXT. Quando utilizzo RTLD_DEFAULT, ottengo NULL. Quando si utilizza RTLD_NEXT, ottengo l'indirizzo della funzione di hook. dlopen() Non posso essere usato per lo stesso motivo, perché ho il gancio su dlopen().Come posso ottenere l'indirizzo di dlopen()/dlsym() fornito dal sistema operativo

Dimmi, per favore, come posso ottenere l'indirizzo delle funzioni originali dlopen() e dlsym()?

Grazie.

+1

'RTLD_NEXT' è progettato esattamente per questo scopo: ottenere il binding originale del simbolo. Se lo chiami dalla libreria di hook, non dovresti ottenere la funzione di hook, dovresti ottenere la funzione dalla libreria C. Un breve esempio compilabile che dimostra il problema potrebbe aiutare. – user4815162342

+0

codice di esempio qui: http://liveworkspace.org/code/955dd416ce716b8a5682d121fe399490 – niXman

+0

potresti usare 'dladdr (3)' su Gnu/Linux. –

risposta

3

__libc_dlsym() è il dlsym() come fornito dalla libc. dlopen() ha la sua controparte come __libc_dlopen().

+0

Risolto. Grazie! – niXman