私は小さな計測ツールを書いています。インストルメンテーション ルーチンをバイナリ ファイル内に挿入する必要があります。これらのルーチンを別のコード セグメントと別のデータ セグメントに挿入することをお勧めします。これを実現する方法を説明していただけますか? さらに、元のファイルのコード セグメントのサイズを変更するにはどうすればよいですか?
一番、
私は小さな計測ツールを書いています。インストルメンテーション ルーチンをバイナリ ファイル内に挿入する必要があります。これらのルーチンを別のコード セグメントと別のデータ セグメントに挿入することをお勧めします。これを実現する方法を説明していただけますか? さらに、元のファイルのコード セグメントのサイズを変更するにはどうすればよいですか?
一番、
インストルメンテーション ルーチンをバイナリ ファイル内に挿入する必要があります。適切なアプローチは、これらのルーチンを別のコード セグメントと別のデータ セグメントに挿入することです。
とはbinary file
? 再配置可能な ( ) オブジェクト ファイルに対してこれを行うことと、完全にリンクされた実行可能ファイル ( ) または共有ライブラリ ( ) に対してこれを行うことには大きな違いがあります。ET_REL
ET_EXEC
ET_DYN
これを達成する方法を説明できますか?
の場合ET_REL
、それはかなり単純明快なはずです。セクション ヘッダーを指すファイル ヘッダーを読み、セクションがどこにあるかを示し.data
ます.text
。次に、新しいファイルを作成して、必要なセクションを拡張し、他のすべてをコピーして、新しいセクションのオフセットとサイズを反映するようにセクション ヘッダーを調整します。
ET_DYN
またはのET_EXEC
場合、問題が難しすぎる可能性が非常に高くなります。再配置テーブル、ハッシュ テーブル、プログラム ヘッダーを調整する必要があります。すべての構造の一貫性を維持し、適切に調整します。