この質問の 2 番目の回答でわかるように、セクションの名前を使用して、プログラム内からプログラムの特定のセクションへのポインターを取得するのは非常に簡単です。を使用libelf
すると、プログラム自体のファイルを開き、その中のすべてのセクション (構造体で表されるElf64_Shdr
) をループし、セクション名が必要なものと一致したときに停止し、構造体のsh_addr
要素に格納されているポインターを使用しますElf64_Shdr
。この場合、必要なポインターは ELF 実行可能ファイルで定義されているため、取得するのは非常に簡単です。
しかし、動的ライブラリを使用するプログラムがあり、その動的ライブラリのセクションへのポインターを取得する必要があるとします。セクションのアドレスは実行時に定義されるため、動的ライブラリのセクションへのポインターを取得するにはどうすればよいでしょうか?
ところで、動的ライブラリとメイン プログラム自体の両方に、それぞれに同じ名前のセクションがあります (これは、ポインターを取得する必要があるセクションです)。したがって、この場合、同じ名前のこれら 2 つのセクションがメモリに隣接して格納される可能性があるため、(最初の段落で説明したように) メイン ファイルのセクションへのポインターを取得し、オフセットを追加するだけで済みます。動的ライブラリ セクションに到達するには?