2016-03-30 9 views
0

同じサイズの値で簡単にELFをパッチすることができます。 しかし、それをもっと大きな値に変更したいのですが? ELFを解凍して再パックする方法はありますか?elfの.rodataセクションのchar *の値を変更することはできますか?

私はメモリ内のバイナリにパッチを当てることには興味がありません。

+1

文字列のサイズを変更したいですか?これは原則可能ですが、コンパイラ/リンカーの最適化のために他の生データ(Cスタイルの文字列 "asdf"と "sdf"の重複など)と重複する可能性があるため、 .rodataセクションを開き、古い.rodata値に必要なすべての参照を新しい場所に変更します。いずれにしても、これは簡単な作業ではありません。 – jotik

答えて

2

しかし、もっと大きな値に変更したい場合はどうすればよいですか?

明らかに、は、より大きな値ではなく、文字列より長くなります。

ELFを解凍して再パックする方法はありますか?

ELFの種類によって異なります。再配置可能なオブジェクトファイルがET_REL(通常は.o)の場合、変更はかなり簡単です。ファイルの最後に新しいセクションを追加するだけです(通常は文字列の内容は.rodataセクションにありますので、それをコピーし、ファイル内の適切な場所を指すように、対応するセクション・ヘッダの.sh_offset.sh_sizeを更新する。

一方ELFバイナリ(ET_DYN又はET_EXEC)を連結するために、タスクは非常に複雑です複数のポインタを更新する必要があり、メモリ内の配置が恣意的ではないため、非常に難しい(ほぼ不可能)ように。

関連する問題