動的にリンクされたELFバイナリがあり、特定のライブラリ呼び出しをオーバーライド/リダイレクトしたいとします。でこれを実行できることはわかっていますLD_PRELOAD
が、環境に依存せずにバイナリで永続的であり、setuid / setgidバイナリで機能するソリューションが必要ですが、いずれもLD_PRELOAD
実現できません。
私がやりたいのは、追加のオブジェクトファイルからコードを追加し(必要に応じて新しいセクションで)、これらのオブジェクトファイルのシンボルをバイナリのシンボルテーブルに追加して、新しく追加されたバージョンのコードが代わりに使用されるようにすることです。共有ライブラリコード。これは、既存のコードで実際に再配置を実行しなくても可能であると思います。それらが同じファイルにある場合でも、これらは実行時に通常のPLTの方法で解決できるはずです(データではなく関数のみを気にする価値があります)。
「これはやりたくない!」という言葉に沿って答えないでください。または「それはポータブルではありません!」私が取り組んでいるのは、バイナリをわずかにABIと互換性のない代替共有ライブラリ実装とインターフェースする方法です。問題のプラットフォームは、重要な場合はi386-linux(つまり、32ビット)です。何が可能かを間違えない限り、ELFファイルを解析してハックを実行するツールをいくつか書くことはできますが、GNUリンカーやその他のツールを使用して、新しいコードを記述せずにこれを実現する素晴らしい方法があると思います。