2012-11-07 41 views
5

Potrzebuję zaimplementować hooks dla syscalls dlsym() i dlopen(). Aby wywołać oryginalny dlsym() z haka, muszę uzyskać adres tej konsoli. Próbuję uzyskać adres w funkcji tak-biblioteka-konstruktor. Ale dostaję tylko adres funkcji haka. Próbowałem określić jako program obsługi jako RTLD_DEFAULT, a także RTLD_NEXT. Używając RTLD_DEFAULT, otrzymuję NULL. Używając RTLD_NEXT, otrzymuję adres funkcji przechwytującej. dlopen() Nie mogę być użyty z tego samego powodu, ponieważ mam hak na dlopen().W jaki sposób mogę uzyskać adres dlopen()/dlsym() dostarczony przez OS

Proszę mi powiedzieć, jak mogę uzyskać adres oryginalnych funkcji dlopen() i dlsym()?

Dzięki.

+1

'RTLD_NEXT' jest przeznaczony do dokładnie tego celu: do uzyskania oryginalnego powiązania symbolu. Jeśli wywołasz go z biblioteki przechwytującej, nie powinieneś otrzymywać funkcji przechwytującej, powinieneś otrzymać funkcję z biblioteki C. Pomoże w tym krótki, kompilowany przykład demonstrujący problem. – user4815162342

+0

przykładowy kod tutaj: http://liveworkspace.org/code/955dd416ce716b8a5682d121fe399490 – niXman

+0

można użyć 'dladdr (3)' na Gnu/Linux. –

Odpowiedz

3

__libc_dlsym() to dlsym() dostarczona przez bibliotekę libc. dlopen() ma swój własny odpowiednik jako __libc_dlopen().

+0

Rozwiązany. Dziękuję Ci! – niXman