2012-11-07 31 views
5

Tôi cần triển khai móc cho các syscalls dlsym() và dlopen(). Để gọi dlsym gốc() từ móc, tôi cần lấy địa chỉ của syscall này. Tôi cố gắng lấy địa chỉ trong hàm-library-constructor-function. Nhưng tôi chỉ nhận được địa chỉ của hàm hook. Tôi đã cố gắng để chỉ định như một xử lý như RTLD_DEFAULT, cũng như RTLD_NEXT. Khi sử dụng RTLD_DEFAULT, tôi nhận được NULL. Khi sử dụng RTLD_NEXT, tôi nhận được địa chỉ của hàm hook. dlopen() Tôi không thể được sử dụng vì lý do tương tự, bởi vì tôi có móc trên dlopen().Làm cách nào tôi có thể lấy địa chỉ dlopen()/dlsym() được cung cấp bởi OS

Hãy cho tôi biết, làm cách nào tôi có thể lấy địa chỉ của các hàm dlopen() và dlsym() gốc?

Cảm ơn.

+1

'RTLD_NEXT' được thiết kế cho mục đích chính xác này: để có được sự ràng buộc ban đầu của biểu tượng. Nếu bạn gọi nó từ thư viện móc, bạn không nên nhận hàm móc, bạn nên lấy hàm từ thư viện C. Một ví dụ ngắn gọn có thể giải thích được vấn đề sẽ giúp ích cho bạn. – user4815162342

+0

mã ví dụ tại đây: http://liveworkspace.org/code/955dd416ce716b8a5682d121fe399490 – niXman

+0

bạn có thể sử dụng 'dladdr (3)' trên Gnu/Linux. –

Trả lời

3

__libc_dlsym()dlsym() theo quy định của libc. dlopen() có đối tác riêng là __libc_dlopen().

+0

Giải quyết. Cảm ơn bạn! – niXman

Các vấn đề liên quan