2012-11-07 9 views
5

Ich muss Hooks für dlsym() und dlopen() syscalls implementieren. Um das ursprüngliche dlsym() vom Hook aufzurufen, muss ich die Adresse dieses Syscalls bekommen. Ich versuche, Adresse in der So-Bibliothek-Konstruktor-Funktion zu bekommen. Aber ich bekomme nur die Adresse der Hook-Funktion. Ich habe versucht, als Handler RTLD_DEFAULT und RTLD_NEXT anzugeben. Wenn RTLD_DEFAULT verwendet wird, bekomme ich NULL. Bei Verwendung von RTLD_NEXT bekomme ich die Adresse der Hook-Funktion. dlopen() Ich kann nicht aus dem gleichen Grund verwendet werden, weil ich den Haken auf dlopen() habe.Wie bekomme ich die Adresse von dlopen()/dlsym() vom Betriebssystem zur Verfügung gestellt

Bitte sagen Sie mir, wie bekomme ich die Adresse der ursprünglichen dlopen() und dlsym() Funktionen?

Danke.

+1

'RTLD_NEXT' ist für genau diesen Zweck bestimmt: um die ursprüngliche Bindung des Symbols zu erhalten. Wenn Sie es aus der Hook-Bibliothek aufrufen, sollten Sie die Hook-Funktion nicht erhalten, Sie sollten die Funktion von der C-Bibliothek erhalten. Ein kurzes kompilierbares Beispiel, das das Problem demonstriert, würde helfen. – user4815162342

+0

Beispielcode hier: http://liveworkspace.org/code/955dd416ce716b8a5682d121fe399490 – niXman

+0

Sie könnten 'dladdr (3)' auf Gnu/Linux verwenden. –

Antwort

3

__libc_dlsym() ist die dlsym() wie von der libc zur Verfügung gestellt. dlopen() hat sein eigenes Pendant als __libc_dlopen().

+0

Gelöst. Vielen Dank! – niXman