タグ付けされた質問 「dynamic-loading」

5
Linuxでライブラリをロードするために使用されるシステムコールは何ですか?
strace出力、実行可能ファイルが呼び出すことをライブラリへのパスが呼び出しですopen()。これは、動的にリンクされる実行可能ファイルで使用されるシステムコールですか?どうdlopen()?open()プログラムの実行に役割を果たすとは思いませんでした。


2
ELF共有ライブラリ-PLTの動機
自己変更コードを使用して、動的にリンクされたライブラリでの関数呼び出しを高速化できますか? 私が理解している限り、ELF共有ライブラリは、一種の間接ジャンプテーブル(プロシージャリンケージテーブル、またはPLT)を使用して、ライブラリ関数の遅延バインディングを有効にします。目的は、最初の呼び出しで関数位置の遅延解決を有効にしながら、コードセグメントのテーブルを変更する必要を回避することです。 ロード時に、または場合によっては最初の関数呼び出しでさえ、そのテーブルのコードを動的に作成する方が高速ではないでしょうか? プロセス間でコードセグメントをできるだけ共有できるようにしますか(動的テーブルはプロセス専用になります)?セキュリティ上の理由からですか(書き込み可能なコードは実行可能であってはなりません -しかし、JITは常にそうしているので、実際にプログラムを起動する前に、ローダーが書き込み権限を追加および削除できます)。 それともそれらの組み合わせであり、関数呼び出しごとの小さなパフォーマンスの向上は努力の価値がないでしょうか?

1
ELF実行可能ファイルのどの部分がメモリに読み込まれますか?
私がすでに知っていること: ELF実行可能ファイルにはいくつかのセクションがあり、.textセクションと.dataセクションはプログラムの主要な部分であるため、メモリにロードされます。しかし、プログラムが機能するためには、特に動的にリンクされている場合、より多くの情報が必要です。 私が興味を持っているのは、.plt、.got、.dynamic、.dynsym、.dynstrなどのセクションです。関数とアドレスのリンクを担当するELFの部分。 私がこれまでに理解できたことから、.symtabや.strtabなどのものがメモリにロードされない(またはとどまらない)ことです。しかし、リンカは.dynsymと.dynstrを使用していますか?彼らは記憶に残っていますか?プログラムコードからそれらにアクセスできますか? そして、カーネルメモリに常駐する実行可能ファイルの部分はありますか? これに対する私の関心は主に法医学ですが、このトピックに関する情報があれば役立ちます。これらのテーブルと動的リンクについて私が読んだリソースはより高レベルであり、それらは動作を説明するだけであり、メモリの内容について実用的なものは何もありません。 質問について不明な点がある場合はお知らせください。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.