395

私は最近proggitでそれへの参照に出くわしました、そして(今のところ)それは説明されていません。

これかもしれないと思いますが、よくわかりません。

4

9 に答える 9

473

共有オブジェクトのパスを設定LD_PRELOADすると、そのファイルは他のライブラリ (C ランタイムを含む) のlibc.soにロードされます。したがってls、特別なmalloc()実装で実行するには、次のようにします。

$ LD_PRELOAD=/path/to/my/malloc.so /bin/ls
于 2009-01-08T22:20:50.060 に答える
58

ストック ライブラリのシンボルを上書きするには、同じシンボルを使用してライブラリを作成し、そのライブラリを で指定しますLD_PRELOAD

非標準の場所にあるライブラリを指定するために使用する人もいますがLD_LIBRARY_PATH、その目的には適しています。

于 2009-01-08T22:18:26.027 に答える
44

多くの人が言及したように、LD_PRELOADライブラリをプリロードするために使用します。ちなみに、設定可能かどうかはコマンドlddで確認できます。

例: 独自の をプリロードする必要があるとしますlibselinux.so.1

> ldd /bin/ls
    ...
    libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f3927b1d000)
    libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f3927914000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f392754f000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f3927311000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f392710c000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f3927d65000)
    libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007f3926f07000)

したがって、プリロード環境を設定します。

export LD_PRELOAD=/home/patric/libselinux.so.1

ライブラリをもう一度確認してください。

>ldd /bin/ls
    ...
    libselinux.so.1 =>
    /home/patric/libselinux.so.1 (0x00007fb9245d8000)
    ...
于 2015-12-09T06:20:54.120 に答える
43

LD_PRELOADライブラリを優先することができます。

たとえば、 と を実装するライブラリを作成できmallocますfreeLD_PRELOADそして、これらをあなたのmallocandでロードするfreeことにより、標準のものではなく実行されます。

于 2009-01-08T22:19:38.410 に答える
11

LD_PRELOADは、標準セットをオーバーライドする関数を備えた共有ライブラリを一覧表示します/etc/ld.so.preload。これらはローダーによって実装され/lib/ld-linux.soます。選択したいくつかの関数だけをオーバーライドする場合は、オーバーライドするオブジェクトファイルを作成して設定することでこれを行うことができますLD_PRELOAD。このオブジェクトファイル内の関数は、それらの関数だけをオーバーライドし、他の関数はそのままにします。

共有ライブラリの詳細については、 http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.htmlをご覧ください。

于 2012-07-24T09:41:45.377 に答える
5

mylib.soenvにエクスポートするには:

$ export LD_PRELOAD=/path/mylib.so
$ ./mybin

無効にするには:

$ unset LD_PRELOAD
于 2014-02-04T10:03:22.323 に答える
2

pathを使用LD_PRELOADすると、提供された共有オブジェクトを、デフォルトで提供されているものよりも、アプリケーション ローダーに強制的にロードさせることができます。

開発者はこれを使用して、さまざまなバージョンの共有オブジェクトを提供することでアプリケーションをデバッグします。

準備された共有オブジェクトを使用して既存の関数をオーバーライドすることにより、特定のアプリケーションをハッキングするために使用しました。

于 2015-05-31T03:16:17.157 に答える