問題タブ [ld-preload]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - LD_PRELOAD - + や - などのプリミティブ演算子をインターセプトできますか?
LD_PRELOAD を使用して、このようなプリミティブ操作 (+、-、% など) をインターセプトすることは可能ですか?
そうでない場合、同様のことを達成する方法はありますか?
c++ - LD_PRELOAD を使用して C++ クラス コンストラクターをインターセプトする
この例に従って、クラス内の C++ 関数をインターセプトしました。
ただし、メンバー関数だけでなく、クラスのコンストラクターとデストラクターをインターセプトしたいと考えています。
例では、彼はtypedef unsigned int (Foo::*methodType)() const;
. C ++でコンストラクタ/デストラクタを型定義できないと思います。
どうすればいいですか?
c++ - fopen 関数のオーバーライドが呼び出されない場合がありますか?
プリロードされたライブラリとして、特定のプロセスのすべてのファイル関連関数をオーバーライドしようとしていました。プリロードされたライブラリとしてコンパイルするこのコードがあり、プロセスを実行して標準出力を確認します。
これはでコンパイルできますg++ -Wall -fPIC -shared -o hooks.so hooks.cpp -ldl
次に、fifos を使用するプログラムを次のように使用します。
問題は、プログラムが何らかの理由で libio/iofopen.c の関数 _IO_new_fopen を使用しているように見えることです。1. fopen を強制的に使用する方法はありますか? この機能を最初に使用するようになったのはどのような経緯でしたか? または2.上書きできますか?同じ署名を試しましたが、うまくいきませんでした..
更新:コールバックが呼び出されるアプリケーションのいくつかの場所から、これはいくつかのインクルードであり、それをオーバーライドする方法が必要であると確信しています..しかし、どのように?
python - 実行時に C 関数 (LD_PRELOAD など) をオーバーライドするにはどうすればよいですか?
仮想ファイル システムを実装するライブラリを使用する Python コードがいくつかあります。これらの仮想ファイル システムのドライバーが多数の C 関数 (readdir()、opendir()、fseek() など) を動作させるには、.so/.cpp ファイルで定義された置換を使用してオーバーライド/置換する必要があります。通常、これは LD_PRELOAD をその .so ファイルに設定することで実行できます。ただし、実行時にこれらの関数をオーバーライドできる必要があり、オーバーライドされた関数を使用する Python 関数が実行されたら、オーバーライドされていない関数に戻すことが理想的です。これは可能ですか?
c - C で getdirentries をオーバーライドする
getdirentries (および lstat など) の libc システムコールをオーバーライドしたいと考えています。たとえば、lstat と chmod をオーバーライドすることはできますが、getdirentries (および特に fstatfs) をオーバーライドすることはできません。
コード例は次のとおりです。
これを FreeBSD で次のようにコンパイルします。
(Linux では、-ldl の追加が必要になる場合があります) LD_PRELOAD=./preload.so bash で使用します。
次に ls -l を発行すると、「lstat」が複数回出力されますが、これで問題ありません。しかし、ls は ktrace によると複数の getdirentries も呼び出し、そのオーバーライド関数は呼び出されません。fstatfs も機能しません。
getdirentries、fstatfs、およびおそらく他のシステムコールをオーバーライドするにはどうすればよいですか? また、この場合、それらが機能しないのはなぜですか?
ありがとう、
c++ - LD_PRELOAD の使用が推奨されないのはなぜですか?
Google のtcmallocドキュメント ページで、このアドバイスを見つけました。
LD_PRELOAD を使用して、自分でコンパイルしなかったアプリケーションで TCMalloc を使用できます。
LD_PRELOAD はトリッキーであり、この使用方法を必ずしもお勧めしているわけではありません。
なぜ彼らは LD_PRELOAD を思いとどまらせるのですか? 本質的に何か問題がありますか?通常のリンクはより堅牢ですか? どのように?