dlopen()
共有オブジェクトの場合、DLLを明示的に呼び出さずに実行するためのメカニズムがありますか?具体的には、呼び出し元のdlopen()
が認識できないグローバル/静的なC++静的初期化コードですか?私は答えが "はい"であるべきであると確信していますが、どのような仕組みが起こるのか、どのようにそれを利用して任意のコードを実行するのかを覚えていません。dlopenしたときに、静的初期化(および/または他の)コードが実行されますか?
3
A
答えて
2
はい:dlopen
は、ロード時にコードを実行するためのELFバイナリ形式のメカニズムを使用します。
- 古い1を呼び出すために
dlopen
とdlclose
のための関数ポインタの配列を含み、特別な.init
と.fini
のセクションを、使用しています。は、実際には2つのそのようなメカニズムがあります。セクションは実行時に存在しない可能性があるため、
DT_INIT
とDT_FINI
という動的タグが対応するセクションを指しています。 - 新しい機構は
.init_array
と.fini_array
とDT_INIT_ARRAY
、DT_INIT_ARRAYSZ
、DT_FINI_ARRAY
とDT_FINI_ARRAYSZ
ダイナミックタグを対応です。
2つのメカニズムの違いは、hereと記載されています。
__attribute__((constructor))
でC関数をデコレートすると、コンパイラはオブジェクトがdlopen
であるときに実行するために、これら2つのメカニズムのうちの1つを使用します。動的初期化を必要とするグローバルC++オブジェクトの構築コードについても同様です。
関連する問題
- 1. Pythonに静的コンストラクタまたは静的初期化子がありますか?
- 2. 静的ポインタはサブクラス化されたウィンドウプロシージャで初期化されませんか?
- 3. dlopen()が返す前に、動的にロードされたライブラリの静的C++オブジェクトが初期化されていますか?
- 4. C++ 11;非静的データメンバ初期化は他のデータメンバにアクセスできますか?
- 5. javascriptの初期化されたオブジェクト(およびdom)
- 6. 静的オブジェクトの初期化を強制しようとしました
- 7. 静的メソッドで初期化され、NSNotificationCenterを使用してオブジェクトが初期化されたメモリリーク
- 8. 静的変数の初期化はコンパイラによってどのように実装されますか?
- 9. 春の静的初期化Springの静的初期化
- 10. C#初期化および実行中のスクリプトのクラスのコンストラクタ
- 11. 再帰的内部静的クラスを初期化する方法はありますか?どのような深さノードが初期化されますし、
- 12. は、他のコンボボックスの初期化および変更
- 13. 奇妙な静的初期化はC#でコンパイルされます
- 14. 静的const配列はMSVCで動的に初期化されますか?
- 15. *静的ライブラリでC++静的クラスメンバが初期化されていません*
- 16. 静的初期化、
- 17. 静的初期化
- 18. Wordpress初期化スクリプトは、リクエストがサーバーにヒットするたびに実行されますか?
- 19. ビューのどの機能が最初に実行されますか?初期化またはレンダリング?
- 20. java.lang.NoClassDefFoundErrorが:クラスを初期化できませんでした|静的ブロック
- 21. 初期化が遅れましたか?
- 22. C++ 11は初期化されたメンバフィールドを再初期化しますか?
- 23. dlopenされたライブラリからdlopen()が呼び出された場合、ロード・リークはありますか?
- 24. contianerがまだ起動して実行中のときにspringのjmsenerが初期化されますか?
- 25. Java、静的メソッドは呼び出されたオブジェクトをインスタンス化できますか?
- 26. アングルコントローラーの属性が変更されるたびに初期化されます
- 27. 静的変数は特定のスレッドで初期化されていますか?
- 28. BizTalkマッピング - スクリプトFunctoidオブジェクトのライフサイクル、初期化および破棄されるとき
- 29. 指定されたサブモジュールを初期化および更新する方法
- 30. クラスおよびcppコアのガイドラインで初期化された優先変数?
http://stackoverflow.com/questions/2053029/how-exactly-does-attribute-constructor-work – Brian
@Brian:私はあなたが答えをすることができると思います... GCC?例えばclangまたはicc? – einpoklum