問題タブ [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 投票する
3 に答える
3834 参照

c - LD_PRELOAD は syscall をインターセプトできませんが、libcall のみをインターセプトできますか?

私のコードは でうまく動作しますがmalloc、 では動作しませんmmap。コードは以下のとおりです。

main.c

preload.c

それをコンパイルする

で実行しますLD_PRELOAD

strace で実行するには

からの出力は へのLD_PRELOAD呼び出しをフックせず、 へmmapの呼び出しのみをフックしますmalloc。一方、 を使用して実行すると、が複数回呼び出されstraceたことを示す出力が表示されます。mmap

この結果は私を困惑させます。mmapが実際に呼び出されたと仮定するとmain.c(私は を介し​​て推測しますmalloc)、どうしてpreload.cインターセプトできないのmmapですか?

PS: 私のプラットフォームは、Linux カーネル 3.13 を搭載した Ubuntu 14.04 です。

PS2: syscall とは、libc の syscall ラッパーを意味します (ただし、これが質問に違いをもたらすかどうかはわかりません)。

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

linux - root アクセスなしで Linux プロセスに仮想ファイルシステムを提示する

ユーザー空間ファイルシステムを特定の Linux プロセスに提示する方法を探していますが、root アクセス権がありません。

明白な答えは FUSE ですが、ルート アクセスがないとカーネル モジュールをロードできないため、FUSE は問題外のようです (LD_PRELOAD する方法がない限り?)。

次善の策は、FUSE が VFS レイヤーで行うのと同じように、関連する FS 呼び出しをインターセプトして変換する何かを使用した LD_PRELOAD のようです。

だから私の質問は:

  1. FUSE のような LD_PRELOAD 可能なファイルシステムは存在しますか?
  2. プロセスのいくつかの FS 呼び出しインターセプトを LD_PRELOAD する場合、おそらく FS インターセプトがフォークまたは子によって継承されないなど、問題はありますか?
0 投票する
1 に答える
463 参照

r - RStudio - LD_PREOAD の問題

サーバー自体で R を使用する場合には発生しない RStudio で RDOBC エラーが発生します。

R -

Rスタジオ -

環境変数を確認し、すべてのユーザーに対して以下が正しいことを確認しました

同じ環境設定の RStudio ではなく R で機能する理由は何ですか?

0 投票する
0 に答える
35 参照

rust - ファイルスコープ可変静的 HashSet/Vec/etc

プログラムの呼び出しをインターセプトする C リンケージ関数を作成したいのLD_PRELOADですが、Rust でインターセプト関数を実装しています。

呼び出しを傍受するための を作成するのに問題はありませんpub extern fnが、メタデータを受け入れるために傍受している関数の署名を変更できないため、プログラムのグローバル状態からどこかで読み書きしたいと思います。ヒープ割り当ては必ずしも必要ではありません。HashSetまたはVecエントリの静的に初期化された大規模なプールを使用できます。ただし、プログラムの実行中にコレクションの要素を追加および削除できる必要があります。

このパターンが多くの Rust 設計目標に反していることは認識していますが、それでも私には正当な使用例のように思えます。

私はRustが初めてなので、これをunsafe行うオプションがあることを願っています。

コード例を見ると便利な場合:

static...デストラクタを必要とする、またはヒープ割り当てを行うストレージを使用できないため、失敗します。そして、有能な構造lazy_static!を許可しません。mut

理想的には、HashSet<c_int>. それがうまくいかない場合は、 を試すことができると思いますVec::from_elem(100, 0)。ある種の歩哨値を指定する必要があるため、これは理想的ではありませんが、機能する場合は満足できると思います.

0 投票する
0 に答える
138 参照

php - mod_php を使用して、Apache で実行されている PHP スクリプトで connect() をオーバーライドします。

PHPがmod_php経由で有効になっているときに、ApacheリクエストでPHPスクリプト内から呼び出されたconnect()システムコールをオーバーライドする方法は?

カスタム connect() バージョンがcustom-connect.cで定義されています。

私はそれをコンパイルします:

内部で connect() を呼び出す単純なスクリプトcurl-test.phpがあります。

コマンド ラインから LD_PRELOAD を使用してスクリプトを実行すると、次のようになります。

私のカスタム connect() が何かを/tmp/connect.logに記録していることがわかります:

コマンドラインからはうまくいくようです。しかし、mod_php を介して PHP を有効にして Apache からスクリプトを実行する場合、自分のバージョンで connect() をオーバーライドするにはどうすればよいでしょうか? LD_PRELOAD も使用する必要がありますか? はいの場合、それを構成する方法は?

0 投票する
0 に答える
79 参照

c - malloc を再コーディングする共有ライブラリのエラー

共有ライブラリを作成する独自のバージョンを実装しようとしてmallocいますが、問題に直面しています。このメッセージで my を実行するmallocと、次のLD_PRELOADメッセージが表示されます。

ld.so によって矛盾が検出されました: dl-load.c: 2325: _dl_map_object: アサーション nsid < _rtld_local._dl_nns が失敗しました!

これは、コマンド ls が機能するため、コマンドls -lRa /home
My path is okを起動すると表示されます。LD_PRELOAD私を助けてくれてありがとう!

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

c++ - 複数の LD_REPLOAD 共有変数

私の目的は非常に単純です。mongoose サーバーを起動すると、サーバーは私が定義した変数を初期化します。これを行うために、私はフックし__libc_start_mainました。次に、サーバーがリクエストを受信すると、その初期化された変数を出力します。これを行うために、私はフックしrecvました。以下は私のコードです。

ただし、makefile を実行すると、次のエラーが表示invalid conversion from ‘void*’ to ‘ssize_t (*)(int, void*, size_t, int)されdlsym(RTLD_NEXT, "recv");ます。私の別の質問は、この方法で目標を達成できるかどうかです。そうでない場合、正しい方法は何ですか?

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

gcc - LD_PRELOAD で指定された lib をロードできません

LD_PRELOAD を使用して so をロードするときに、いくつかの問題が発生しました。

手順は次のとおりです。

  1. libtest.c:

    /li>
  2. gcc -o libtest.so libtest.c -fPIC --shared

  3. export LD_PRELOAD= pwd/libtest.so

  4. main.c

    extern void fun(); void main() { fun() }

  5. gcc -o メイン -L。main.c -ltest

  6. それでldd main

    ldd main linux-vdso.so.1=>(0x00007ffff7ffd000) /home/shiyanlou/Code/libtest.so(0x00007ffff7df9000) libtest.so=>not found libc.so.6=>/lib/x86_64-linux-gnu/libc.so.6 (0x00007ffffa29000) /lib64/ld-linux-x86-64.so.2 (0x0000555555554000)

  7. 促進する main を実行./main します: 共有ライブラリのロード中にエラーが発生しました: libtest.so。共有オブジェクト ファイルを開けません: そのようなファイルまたはディレクトリはありません。

LD_PRELOAD変数をエクスポートした後、libtest.soが見つからないというプロンプトが表示されるのはなぜだろうか。ただし、LD_PRELOAD を使用して別の共有ライブラリ (「libc.so」ではない) を指定し、malloc 関数を挿入しようとしましたが、うまくいきました。リンク時に使用されなかった共有ライブラリに対してのみ LD_PRELOAD が機能するのはなぜですか???