From owner-freebsd-users-jp@freebsd.org Wed Aug 10 11:30:05 2016 Return-Path: Delivered-To: freebsd-users-jp@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id BF75CBB4BAE for ; Wed, 10 Aug 2016 11:30:05 +0000 (UTC) (envelope-from junchoon@dec.sakura.ne.jp) Received: from dec.sakura.ne.jp (dec.sakura.ne.jp [210.188.226.8]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 8A7421532 for ; Wed, 10 Aug 2016 11:30:05 +0000 (UTC) (envelope-from junchoon@dec.sakura.ne.jp) Received: from fortune.joker.local (123-48-23-227.dz.commufa.jp [123.48.23.227]) (authenticated bits=0) by dec.sakura.ne.jp (8.15.2/8.15.2/[SAKURA-WEB]/20080708) with ESMTPA id u7ABU2F0072947; Wed, 10 Aug 2016 20:30:03 +0900 (JST) (envelope-from junchoon@dec.sakura.ne.jp) Date: Wed, 10 Aug 2016 20:30:01 +0900 From: Tomoaki AOKI To: freebsd-users-jp@freebsd.org Message-Id: <20160810203001.3f14c3baebf75e33f400cdaa@dec.sakura.ne.jp> In-Reply-To: References: <20160807030939.GA24330@ns.ribbon.or.jp> Organization: Junchoon corps X-Mailer: Sylpheed 3.5.1 (GTK+ 2.24.29; amd64-portbld-freebsd11.0) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit Subject: [FreeBSD-users-jp 95921] Re: =?iso-2022-jp?b?TERfUFJFTE9BRCAbJEIkLCQmJF4kLyQkJCskSiQkGyhC?= X-BeenThere: freebsd-users-jp@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: Discussion relevant to FreeBSD communities in Japan List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Aug 2016 11:30:05 -0000 青木@名古屋です。 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 岡部 勝幸 wrote: > 岡部です。 > > 9.3-RELEASEではなく10.3-STABLEですが、LD_PRELOADの設定反映されますよ。 > ソースの方に綴り間違え等ありませんか? > > 以下、試した内容です。 > > > % cat random_num.c > > #include > > #include > > #include > > > > 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 > > > > 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-unsubscribe@freebsd.org" > -- 青木 知明 [Tomoaki AOKI]