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.
'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
Beispielcode hier: http://liveworkspace.org/code/955dd416ce716b8a5682d121fe399490 – niXman
Sie könnten 'dladdr (3)' auf Gnu/Linux verwenden. –