2

、、、などmmapのLD_PRELOAD関数を試していますが、一部の関数はLD_PRELOADを正常に取得しますが、他の関数は取得しません。たとえば、、は完全にプリロードされていますが、そうではありませんが、 pthreadを使用しているため、によって報告されたように、プログラムから呼び出されていることは確かです。ここでLD_PRELOADされない理由は何ですか?readopenclonemmapreadopencloneclonestraceclone

4

1 に答える 1

1

straceシステムコールを表示します; LD_PRELOADは(Cライブラリ)関数をオーバーライドします。これは、システムコールが、関数シンボルを経由せずに(たとえば、Cライブラリ内の内部リンケージを介して、またはシステムコールを直接呼び出すことcloneなく)、別の関数によって呼び出されていることを示している可能性があります。clone

実際、clonePosixライブラリ関数ではありません。たまたま公開されているのはLinux実装の詳細です。マニュアルページには次のように書かれています。

clone()およびsys_clone呼び出しはLinux固有であり、移植を目的としたプログラムでは使用しないでください。

代わりに、LD_PRELOAD-オーバーライドpthread_createなどを行う必要があります。他のプラットフォームでは、。なしで実装できcloneます。

于 2012-06-25T16:07:34.007 に答える