7

私は現在、すでにコンパイルされたELF実行可能ファイルにデータを追加する方法を探しています。つまり、ファイルを再コンパイルせずに実行可能ファイルに埋め込みます。

を使用して簡単にそれを行うことがcat myexe mydata > myexe_with_mydataできましたが、元の実行可能ファイルのサイズがわからないため、実行可能ファイルからデータにアクセスできませんでした。

誰かが私がこれをどのように実装できるかについての考えを持っていますか?実行可能ファイルにセクションを追加したり、実行可能ファイルのデータの先頭を検出するために特別なマーカー(0xBADBEEFC0FFEEたとえば)を使用したりすることを考えましたが、それを行うためのより美しい方法があるかどうかはわかりません。

前もって感謝します。

4

2 に答える 2

4

objcopy(1)を使用して、ファイルを特別なセクションとしてelfファイルに追加できます。

objcopy --add-section sname=file oldelf newelf

ファイルをoldelfに追加し、結果をnewelfに書き込みます(oldelfは変更されません)次に、libbfdを使用してelfファイルを読み取り、名前でセクションを抽出するか、セクションテーブルを読み取って検出する独自のコードをロールします。あなたのセクション。システムが期待するものと衝突しないセクション名を使用するようにしてください。名前がで始まらない限り、.問題はありません。

于 2010-05-27T16:12:52.607 に答える
1

を使用して埋め込まれたセクションを抽出/参照するためのシンプルなインターフェイスを提供するelfdataembedという小さなライブラリを作成しましたobjcopy。これにより、オフセット/サイズを別のツールに渡したり、ファイル記述子を使用してランタイムから直接参照したりできます。うまくいけば、これは将来誰かを助けるでしょう。

このアプローチは、外部ツールがデータを抽出せずに参照できるため、シンボルにコンパイルするよりも効率的であることに言及する価値があります。また、抽出/参照のためにバイナリ全体をメモリにロードする必要もありません。それ。

于 2014-01-03T17:57:17.747 に答える