バイナリ中のテキスト

Rubyのバイナリにライブラリへのパスが含まれているかどうか確認しようと思ってBINARY HACKSを見直してみたらnmコマンドはオブジェクトファイルに対しては効果があるとのこと。実行ファイルとは書かれていない。
念のため試してみたが、残念ながら /usr/bin/ruby1.8 からはテキストが見つけられず。


しょうがないので、いくつかのファイルに対し

$ cat -v /usr/bin/ruby1.8 | less

するなどした。したら何やら /usr/lib/libruby1.8.so.1.8.6 中にはライブラリへのパスが含まれているように見えた。


Emacsでバイナリファイルの編集ができるらしいと聞いたのを思い出したので検索し、Hexlモードというものを知った。正直、これがあればcat -vとかいらんかった。
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/124editbinary.html
で、その含まれるパスを編集したらどうなるか実験してみた。


編集してみると、確かにここに書いてあるパスに探しにいくようだった。これがないと、no such file to load -- net/http (LoadError)とか言われて、何事もなかったかのように落ちる。
書き換え先のアドレスにシンボリックリンクを張ったのは動作したので、おそらくここが正解。


こちらにしたがって確認してみると、 http://www.office-iwata.com/blog/techtips/2007/03/ruby.html 確かに$:や$LOAD_PATHに影響を与えていることが分かった。
つーことはあれだ。やっぱりここが正解だってことだ。
http://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFCAD1BFF4.html#a.24.3a


努力の向ける方向は少し間違ってる気がするけど、他のことだと成果が出ないので今日のところはこんなこと確認してる。
そんな日。