青木@名古屋です。 lddに-aオプションを付けないとLD_PRELOADで読み込んだ(バイナリのELF ヘッダに埋め込まれていない)ライブラリは表示されないようです。
実行結果(ソースやビルド手順は岡部さんと同じなので省略) % ldd random_num random_num: libc.so.7 => /lib/libc.so.7 (0x800821000) % ldd -a random_num /home/junchoon/scratch/tmp/random_num: libc.so.7 => /lib/libc.so.7 (0x800821000) % ./random_num 55440290 1924551685 541495487 2026454476 1677237165 1454698439 15359984 457230254 972406818 890853262 % LD_PRELOAD=./unrandom.so ldd ./random_num ./random_num: libc.so.7 => /lib/libc.so.7 (0x800a22000) % LD_PRELOAD=./unrandom.so ldd -a ./random_num /home/junchoon/scratch/tmp/random_num: libc.so.7 => /lib/libc.so.7 (0x800a22000) ./unrandom.so: libc.so.7 => /lib/libc.so.7 (0x800a22000) % LD_PRELOAD=./unrandom.so ./random_num 42 42 42 42 42 42 42 42 42 42 ログインシェルが(t)cshでないためsetenvコマンドが存在しないのでコマンド ラインに違いがありますが、実行形式1個動かすだけであれば実質的に差は 無い筈です。(岡部さんも同様?) LD_PRELOADで読み込んだライブラリは、実際の使用順によらずELFヘッダに 記録されているものの後に表示されてしまうようです。 stable/11, r303807にKarl Denninger氏のZFS過剰スワップ対策パッチ及び 近々(恐らくstable/11だけに)MFCされる筈のいくつかのzfs関連パッチを 当てた状態のamd64環境です。 On Wed, 10 Aug 2016 09:44:21 +0900 岡部 勝幸 <hgc02...@nifty.com> wrote: > 岡部です。 > > 9.3-RELEASEではなく10.3-STABLEですが、LD_PRELOADの設定反映されますよ。 > ソースの方に綴り間違え等ありませんか? > > 以下、試した内容です。 > > > % cat random_num.c > > #include <stdio.h> > > #include <stdlib.h> > > #include <time.h> > > > > int > > main(int argc, char **argv) > > { > > srand(time(NULL)); > > int i = 10; > > while (i--) > > printf("%d\n", rand()); > > return 0; > > } > > > > % cc -o random_num random_num.c > > % ./random_num > > 2016130939 > > 2115726213 > > 976251671 > > 1086788223 > > 1301263032 > > 354334582 > > 329183349 > > 666688777 > > 1616105446 > > 511080472 > > % cat unrandom.c > > #include <stdlib.h> > > > > int > > rand(void) > > { > > return 42; > > } > > > > % cc -shared -fPIC -o unrandom.so unrandom.c > > % LD_PRELOAD=./unrandom.so ./random_num > > 42 > > 42 > > 42 > > 42 > > 42 > > 42 > > 42 > > 42 > > 42 > > 42 > > % LD_PRELOAD=./unrandom.so ldd ./random_num > > ./random_num: > > libc.so.7 => /lib/libc.so.7 (0x800a21000) > > % > > ---- > 岡部 勝幸 > > On 2016/08/07 12:09, User Ribbon wrote: > > 実行時に動的ライブラリを差し替える手段として、LD_PRELOAD 環境変数 > > があります。使用例としては、 > > > > https://siguniang.wordpress.com/2015/05/15/override-functions-with-ld_preload/ > > > > などがあります。 > > FreeBSDでも動くと思っててストしてみたのですが動きませんでした。 > > > > 上記URLにあるサンプルプログラムを使い、 > > > > setenv LD_PRELOAD ./unrandom.so > > > > をしたあと、 > > %ldd random_num > > としても、 > > random_num: > > libc.so.7 => /lib/libc.so.7 (0x800a1b000) > > > > となり、LD_PRELOAD した結果が反映されません。 > > 動作環境は > > FreeBSD bsd09-64 9.3-RELEASE-p43 FreeBSD 9.3-RELEASE-p43 #0: Sat May 28 > > 00:19:32 UTC 2016 > > です。 > > > > 何かほかに設定しないと動かないのでしょうか。 > > > > ribbon > > _______________________________________________ > freebsd-users-jp@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/freebsd-users-jp > To unsubscribe, send any mail to "freebsd-users-jp-unsubscr...@freebsd.org" > -- 青木 知明 [Tomoaki AOKI] <junch...@dec.sakura.ne.jp> _______________________________________________ freebsd-users-jp@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-users-jp To unsubscribe, send any mail to "freebsd-users-jp-unsubscr...@freebsd.org"