2016-11-24 4 views
2

を交換した後、私は共有ライブラリ内とそれにリンクされたプログラムを実行した後に特定の文字列を変更しようとしました、私はこのエラーを得ました:この文字列は、このライブラリを使用するすべてのファイルにし、ライブラリ全体に変更されるためシンボルルックアップエラー文字列

sed -i "s/have_somewq/have_qwerty/g" ./libprog.so 

理論的には、このは、関係なく、を動作するはずです。

ここで何が問題になりますか?
この問題を修正またはデバッグするにはどうすればよいですか?

+0

* "理論的には、これは関係なく動作するはずです。" * - あなたのプログラムでそれを変更しなかった 'prog'と' prog'は 'sed'の引数ではありません。それらの名前が何らかの方法でソートされていないことは確かですか? – jww

答えて

2

sed -i "s/have_somewq/have_qwerty/g" ./libprog.so

sedを使用してバイナリファイルのシンボル名を変更しようとしていますか?これはうまくいきません。理由の1つは、シンボル名に加えて、共有ライブラリには専用セクションにハッシュ値が含まれているため、多くの労力を費やすことなく変更することができないということです。

シンボルにはPROG_PRIVATEバージョンがあります。の場合、ライブラリの外で使用することはできません。

+1

ありがとう!ちょうど1つの質問、それを行う公共のツールはありますか?シンボルを難読化するのと同じですか? – Drxxd

+0

私はかつてこのようなものを探していましたが、何も見つからず、一般的な知識は実装するのが非常に難しいということでした。 – yugr