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.
'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
przykładowy kod tutaj: http://liveworkspace.org/code/955dd416ce716b8a5682d121fe399490 – niXman
można użyć 'dladdr (3)' na Gnu/Linux. –