2012-11-07 14 views
5

dlsym()とdlopen()のシステムコールのフックを実装する必要があります。フックから元のdlsym()を呼び出すには、このシステムコールのアドレスを取得する必要があります。私はそのようなライブラリのコンストラクタ関数でアドレスを取得しようとします。しかし、私はフック機能のアドレスだけを取得しています。 RTLD_NEXTと同様に、RTLD_DEFAULTとしてハンドラとして指定しようとしました。 RTLD_DEFAULTを使用すると、NULLが返されます。 RTLD_NEXTを使用するとき、私はフック関数のアドレスを取得します。 dlopen()私はdlopen()にフックがあるので、同じ理由で使用することはできません。OSが提供するdlopen()/ dlsym()のアドレスを取得する方法

元のdlopen()関数とdlsym()関数のアドレスを取得するにはどうすればよいですか?

ありがとうございました。

+1

'RTLD_NEXT'はまさにこの目的のために設計されています:シンボルの元の束縛を得るためです。フックライブラリから呼び出すと、フック関数が得られないはずです。関数をCライブラリから取得する必要があります。この問題を示す簡単なコンパイル可能な例が役に立ちます。 – user4815162342

+0

サンプルコードはこちら:http://liveworkspace.org/code/955dd416ce716b8a5682d121fe399490 – niXman

+0

Gnu/Linuxで 'dladdr(3)'を使うことができます。 –

答えて

3

__libc_dlsym()は、libcで提供されたdlsym()です。 dlopen()には、それ自身の対応物が__libc_dlopen()としてあります。

+0

解決済み。ありがとうございました! – niXman

関連する問題