-2

私は C ライブラリをコンパイルしました。ファイル ライブラリの例 filelib.a があります。ソース コード C が PC から削除されたため、filelib.a の文字列を編集したいです。そこで文字列を編集したいのですが、ファイル filelib で。 「見た記事」という文字列があります。私がgrepした場合:

$ grep -R "/etc/resolv.conf" *
Binary file filelib.a matches
Binary file filelib.so matches

そのため、ファイル filelib.a と filelib.so には文字列 "/etc/resolv.conf" があります。バイナリファイル filelib.a と filelib.so の文字列を編集して置き換える方法、例 文字列 "/etc/resolv.conf" を "/system/etc/resolv.conf" に置き換えたい

16 進エディタ BLESS で編集しましたが、このライブラリを使用するとエラーが発生します。

could not read symbols: Malformed archive
collect2: error: ld returned 1 exit status

私はLinux ubuntuを使用しています。

ありがとう。

4

3 に答える 3

2

ソースコードを取得/回復する可能性がほとんどない場合、新しい文字列が元の文字列と同じか短い場合は、16 進エディターを使用してアーカイブを開き、文字列をビンパッチしてゼロで埋めることができます。以前よりも短い場合 (少なくとも 1 つの終端ゼロ バイトが常に存在する必要があります)。

文字列をもっと長いものに変更したい場合、それは簡単ではありません。おそらく、アーカイブを抽出し、変更したいオブジェクト ファイルを逆アセンブルし、アセンブリを変更し、それを再アセンブルしてar、ライブラリ内の変更されたオブジェクト ファイル。

于 2013-03-23T13:08:05.207 に答える
0

Bless Hex Editorがその仕事をしてくれると思います。

ファイルの長さを変更しないようにしてください。ターミネータを挿入すれば、古いものよりも短い文字列を使用できる可能がありますが、それはすべてプログラムの使用方法に依存するため、お勧めしません。'\0'

于 2013-03-23T13:06:08.453 に答える
0

変更したい文字列がバイナリ ファイル内の文字列よりも短いか等しい限り、16 進エディタを使用して文字列を置き換え、リーミング文字を\0.

于 2013-03-23T13:03:38.517 に答える