問題タブ [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.

0 投票する
5 に答える
3780 参照

c++ - 特定の実行可能ファイルのLD_PRELOADとcalloc()の挿入に関する問題

私の前の質問に関連して

私はうまく介入しましたが、もっと問題mallocがあるようです。calloc

これは特定のホストで発生し、内部呼び出しcallocの可能性がある無限ループでスタックします。ただし、基本的なテストホストはこの動作を示しませんが、私のシステムの「ls」コマンドは示しています。callocdlsym

これが私のコードです:

さて、次のことを行うと、無限ループに続いてセグメンテーション違反が発生します。例:

ただし、インターポーザーをコメントアウトすると、callocほとんど機能しているように見えます。

つまり、「ls」はinit()2回呼び出されることを意味します。

編集出力からわかるように、次のホストプログラムは正しく機能することに注意してください-init()一度だけ呼び出され、calloc正常に挿入されます。

0 投票する
2 に答える
907 参照

c - LD_PRELOAD、bash、printf

initの属性printf()を介していくつかの s を実行する共有オブジェクトがあります。ものすごく単純。設定したいくつかの変数を通知するだけです。

printfsが原因でエラーLD_PRELOAD=mylib.so ./program.sh -flagsprogram.sh吐き出すと:

その後、プログラムは正常に起動します。printf()変数のチェックを行うときに、bash スクリプトが s で破損しているようです。

回避策はありますか?

0 投票する
1 に答える
148 参照

gpl - LD_PRELOADSが非GPLライブラリで許可されているGPLプログラムのinitスクリプトを配布していますか?

一緒に配布することはできますか?

  • GPLプログラムとそのソース
  • ソースのない非フリーライブラリ
  • ライブラリをGPLプログラムにLD_PRELOADSするinitスクリプト

GPLプログラムは、フリーでないライブラリがなくても正常に機能します。この非フリーライブラリは、プログラムバイナリがリンクされているフリーライブラリと同じインターフェイスを提供します。

このようなものを一緒に配布することは許可されていますか、それともGPL違反になりますか?

0 投票する
1 に答える
12714 参照

macos - OSX の LD_PRELOAD とまったく同じものは何ですか?

ライブラリ関数をフックするために使用LD_PRELOADしていますが、Linux では完全に機能します。しかし、OSXで同等のことを行う方法がわかりません。

Linuxでのセットアップは次のとおりです。

コードは次のとおりです。

次に、次のようにコンパイルします。

次に、次のように実行します。

上記はすべて Linux でうまく機能しますが、これを OSX で機能させるための各ステップに相当するものは何ですか? これをグーグルで検索しましたが、一部の手順の情報が欠落しているため、提供された情報を使用して機能させることができませんでした.

前もって感謝します!

0 投票する
1 に答える
417 参照

c - HPUX および Solaris の LD_PRELOAD が有効にならない場合があります。

LD_PRELOAD に関する問題が発生します。

HPUX と Solaris で LD_PRELOAD を使用すると、open64/open/creat64/creat 関数を /usr/bin/touch にアタッチできないことがわかりましたが、リンク解除は /usr/bin/rm で有効になります。なぜですか?

私は簡単なテストをしました:

これを行うと、次のことがわかりました。通常、ファイルを開くことはできませんが、タッチするとできます。

なぜ!私は長い間これに戸惑いました. 誰が私を助けることができます.thx

最後に、下手な英語でごめんなさい

0 投票する
1 に答える
1690 参照

c - libfaketime と Mac OS、LD_PRELOAD

Mac OS 10.7.2 を実行し、libfaketimeを実行しようとしても何も起こりません。指示どおりにインストールして実行しましたが、時刻と日付だけがシステムに設定されているとおりに正確に保持されますか? OSXでこれを正常に実行できる人はいますか?

0 投票する
1 に答える
3126 参照

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は呼び出されていません。何故ですか?

0 投票する
2 に答える
3712 参照

c - gdbでLD_PRELOADをロードしたダイナミックライブラリの関数をデバッグするにはどうすればよいですか?

動的共有ライブラリlibexecHook.soでいくつかの関数をデバッグしようとしています。このライブラリは、execve()およびその仲間への呼び出しをインターセプトして書き換えるために、LD_PRELOADを設定してプリロードされています。デバッグの目的で、シンボルを使用してgmakeを作成しました。私が他の質問で読んだことから、これはうまくいくはずです:

ブレークポイントが適切に設定されているのがわかります。

しかし、gdbはプリロードされたexec ..()関数で壊れることはありません。実行中にデバッグ出力を見ると、ライブラリ関数が呼び出されていることがわかります。