問題タブ [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とcalloc()の挿入に関する問題
私の前の質問に関連して
私はうまく介入しましたが、もっと問題malloc
があるようです。calloc
これは特定のホストで発生し、内部呼び出しcalloc
の可能性がある無限ループでスタックします。ただし、基本的なテストホストはこの動作を示しませんが、私のシステムの「ls」コマンドは示しています。calloc
dlsym
これが私のコードです:
さて、次のことを行うと、無限ループに続いてセグメンテーション違反が発生します。例:
ただし、インターポーザーをコメントアウトすると、calloc
ほとんど機能しているように見えます。
つまり、「ls」はinit()
2回呼び出されることを意味します。
編集出力からわかるように、次のホストプログラムは正しく機能することに注意してください-init()
一度だけ呼び出され、calloc
正常に挿入されます。
c - LD_PRELOAD、bash、printf
initの属性printf()
を介していくつかの s を実行する共有オブジェクトがあります。ものすごく単純。設定したいくつかの変数を通知するだけです。
printfsが原因でエラーLD_PRELOAD=mylib.so ./program.sh -flags
をprogram.sh
吐き出すと:
その後、プログラムは正常に起動します。printf()
変数のチェックを行うときに、bash スクリプトが s で破損しているようです。
回避策はありますか?
gpl - LD_PRELOADSが非GPLライブラリで許可されているGPLプログラムのinitスクリプトを配布していますか?
一緒に配布することはできますか?
- GPLプログラムとそのソース
- ソースのない非フリーライブラリ
- ライブラリをGPLプログラムにLD_PRELOADSするinitスクリプト
GPLプログラムは、フリーでないライブラリがなくても正常に機能します。この非フリーライブラリは、プログラムバイナリがリンクされているフリーライブラリと同じインターフェイスを提供します。
このようなものを一緒に配布することは許可されていますか、それともGPL違反になりますか?
macos - OSX の LD_PRELOAD とまったく同じものは何ですか?
ライブラリ関数をフックするために使用LD_PRELOAD
していますが、Linux では完全に機能します。しかし、OSXで同等のことを行う方法がわかりません。
Linuxでのセットアップは次のとおりです。
コードは次のとおりです。
次に、次のようにコンパイルします。
次に、次のように実行します。
上記はすべて Linux でうまく機能しますが、これを OSX で機能させるための各ステップに相当するものは何ですか? これをグーグルで検索しましたが、一部の手順の情報が欠落しているため、提供された情報を使用して機能させることができませんでした.
前もって感謝します!
c - HPUX および Solaris の LD_PRELOAD が有効にならない場合があります。
LD_PRELOAD に関する問題が発生します。
HPUX と Solaris で LD_PRELOAD を使用すると、open64/open/creat64/creat 関数を /usr/bin/touch にアタッチできないことがわかりましたが、リンク解除は /usr/bin/rm で有効になります。なぜですか?
私は簡単なテストをしました:
これを行うと、次のことがわかりました。通常、ファイルを開くことはできませんが、タッチするとできます。
なぜ!私は長い間これに戸惑いました. 誰が私を助けることができます.thx
最後に、下手な英語でごめんなさい
c - libfaketime と Mac OS、LD_PRELOAD
Mac OS 10.7.2 を実行し、libfaketimeを実行しようとしても何も起こりません。指示どおりにインストールして実行しましたが、時刻と日付だけがシステムに設定されているとおりに正確に保持されますか? OSXでこれを正常に実行できる人はいますか?
gcc - GNU tar の openat() システム コールをインターセプトする
openat()
経由でロードできるカスタム共有ライブラリを使用して、Linuxでシステム コールをインターセプトしようとしていLD_PRELOAD
ます。例intercept-openat.c
には次の内容があります。
経由でコンパイルしgcc -fPIC -Wall -shared -o intercept-openat.so intercept-openat.c -ldl
ます。次に、この小さなサンプル プログラムを実行すると、次のようになります。
呼び出しは、openat()
ライブラリを介して書き直されます。
ただし、GNU tar では、同じシステム コールを使用していても、同じことは起こりません。
そのため、カスタムopenat()
fromintercept-openat.so
は呼び出されていません。何故ですか?
c - gdbでLD_PRELOADをロードしたダイナミックライブラリの関数をデバッグするにはどうすればよいですか?
動的共有ライブラリlibexecHook.soでいくつかの関数をデバッグしようとしています。このライブラリは、execve()およびその仲間への呼び出しをインターセプトして書き換えるために、LD_PRELOADを設定してプリロードされています。デバッグの目的で、シンボルを使用してgmakeを作成しました。私が他の質問で読んだことから、これはうまくいくはずです:
ブレークポイントが適切に設定されているのがわかります。
しかし、gdbはプリロードされたexec ..()関数で壊れることはありません。実行中にデバッグ出力を見ると、ライブラリ関数が呼び出されていることがわかります。