2

静的にリンクされたシンボルをプリロードすることはまったく可能ですか?

Linuxでは、使用できます

LD_PRELOAD=libSomeLibrary.so ./anExecutableLinkedToAnOtherLibrary

ただし、これはシンボルが動的にリンクされている場合にのみ機能します。ここで、シンボルが他のライブラリに静的にリンクされている実行可能ファイルにいくつかのシンボルを挿入する必要があります。

一般的なケースでは、静的シンボルがインライン化されている可能性があるため、これは理論的に不可能であることを知っています。しかし、最適化がなく、完全なデバッグ シンボルが含まれているデバッグ ビルドがある場合、理論的には、シンボルを適切な場所に挿入できるはずです。

Linux と Windows の両方の世界での回答に興味がありますが、Linux でこれを解決するだけでも十分です。

4

1 に答える 1

2

静的シンボルにはld.soが使用されていないため、静的シンボルのプリロードメカニズムはありません。オペレーティングシステムは、ファイルをメモリにマップして実行を開始するだけです。

ライブラリの新しいバージョンを含むようにバイナリを変更できる場合があります。1つの方法はobjcopy、古いシンボルを取り除き、ld新しいシンボルをリンクするために使用することです。

于 2012-09-15T16:37:50.643 に答える