1

私は、Libelf と Elfio を使用して、ELF ファイルに新しいセクションを追加しようとしています。のように実行可能にしたいのですが.text

これは私の問題です。Libelf を使用すると、ELF をロード ( elf_begin())、更新 ( elf_update())、リリース ( elf_end()) するとすぐに、実行可能でなくなります (起動時にseg fault )。readelf -Sセクションを表示しますが、エラーも返します:

readelf: Warning: the .dynamic section is not contained within the dynamic segment

.dynamicLibelf には、セクションをセグメントに「追加」する関数が見つかりませんでしたDYNAMIC

しかし、私は Elfio (segment->add_section_index()関数を使用) でそれを行うことができますが、ELF をロードするときに Elfio がそれらを上書きするように見えるため、他のすべてのセグメントに手動で他のすべてのセクションを追加する必要があります。

これらのライブラリの経験はありますか?

私の最終的な目標は、パッカーを作成するために、ELF に新しい実行可能セクションを作成し、そのエントリ ポイントを変更して、その新しいセクションにジャンプして直接実行できるようにすることです。

4

1 に答える 1

1

Libelf は、実行可能な ELF ファイルのセグメント (つまり、プログラム ヘッダー エントリ) を管理しません。ただし、デフォルトでは、 を呼び出すとセクションが再レイアウトされますelf_update()

再レイアウト後、プログラム ヘッダー エントリにはおそらく廃止されたオフセットが含まれます。ローダーは、編集前にのみ正しかったファイル オフセットからセクションをロードしようとします (または拒否します)。

したがって、エラー メッセージ: .dynamic セクションはファイル内の別のオフセットにあり、ローダーはそれが DYNAMIC セグメントにないことに気付きます。

を呼び出して、セクションのレイアウトを担当していることを Libelf に伝えることができますelf_flagelf(elf, ELF_C_SET, ELF_F_LAYOUT)

しかし、繰り返しになりますが、新しいセクションを追加することはもはや簡単ではありません...

于 2012-07-04T15:47:04.347 に答える