2009-04-27 12 views
6

elfファイルに新しいフラグを追加したいと思います。このフラグは、プロセス記述子のカーネルに対して利用可能な でなければなりません。私の最初のアイデアはlibelfを使うことでしたが、残念ながら Ubuntuにはバグがあるようです。 Elfeditはおそらくいいツールでしたが、特にUbuntuのLinux版は見つかりませんでした。elfファイルを変更する

他の便利なツールがある場合は誰でも私に提案できますか? elfファイルにカスタムフラグを追加するにはどうすればいいですか?

ご協力いただきありがとうございます。

+0

libelfでどんなバグがありましたか? –

+0

ファイル内にtype.c:3: /usr/include/libelf.h:98:エラー: 'off64_t'の前に予期される指定子 - リスト ... もっと見る: https:/ /bugs.launchpad.net/ubuntu/+s...ls/+bug/201078 –

答えて

2

新しいフラグを利用するようにカーネルを修正できる人は、おそらくELFライブラリにフラグを追加する方法を尋ねることはありません。

カーネルでこの新しいフラグをどのように使用する予定ですか?旗の目的は何ですか?

標準のlibelfに追加しているので、あなたはUbuntuのバグを修正することはできませんし、修正したことを知らせることもできません(修正を利用可能にする - おそらく、チェーンを上げる)。

+0

はい、あなたは絶対に正しいです。もし私が適切なカーネルハッカーであれば、これはおそらく簡単な作業になるでしょう。残念ながら、私はちょうどカーネルに関する実用的な作業から始めています。基本的には、ELFファイルにフラグを指定してアプリケーションに "特別な扱い"が必要であることをカーネルに伝えたいとします。この特別な扱いは、コンテキストスイッチ中に行うべきであり、ELFファイルにこのカスタムフラグが設定されているかどうかを知りたいと思います。つまり、私は2つのタスクを持っています(1)対応する実行可能フラグにカスタムフラグを追加する(2)このカスタムフラグをカーネルで利用できるようにする –

1

ELFIO libraryをご覧ください。 WriteObjとWriterの例が含まれています。ライブラリを使用すると、ELFバイナリファイルを作成および/または変更できます。

+0

ライブラリが本当に好きで、最後の日に作業しました。としょうかん)。私はlibとcrash(lol)はしていますが、テンプレートとマクロをすべてのソースに変換しました(宣言と定義に分かれています)。まあ、あなたはそれから "本当の"図書館を作ると思うかもしれませんか? – lama12345

0

(古い質問が、参考のために、私は私自身の経験に基づいて回答を書いていますが)

私は、メモリ構造体のエルフのファイルを読み、あなたのメモリ内の構造体とのフラグと、ロードプロセスメモリに変更を加えることが示唆されました。この方法は、バグ修正と比較して、より少ないeffordを必要とする。開始するには、elf.c、elf、プログラムヘッダ、セクションヘッダstructを確認してください。 elf、program、sectionの3つの構造体メンバを持つ構造体のファイルヘッダを読むことができます。 elfヘッダーから構造体を読み込みます。 elfヘッダーで指定されたオフセットのプログラムヘッダーを読み込みます(すべてのプログラムヘッダーに対して繰り返します)。同じように、セクションヘッダーを通してすべてのセクションを読むことができます。 独自の構造体に3つのヘッダ構造体をカプセル化することによって、他の構造体メンバに必要なデータを追加することもできます。