スタティックリンクの手順は、
1、セクションのマージ
2、再配置
3、シンボル解決
という順番に行われると思います。
ダイナミックリンクの場合、実行時にリンクされると思いますがコンパイルされる段階のリンクでは、何が行われているのでしょうか?
ちょっと言葉が分かりにくいんですが・・・
えーーとっ・・・つまり
アセンブルが終了した後ですね。
実行ファイルを生成するとき、スタティックリンクでは、上記の3つをすべて順番に処理するはずです。
では、ダイナミックリンクの時は、リンクの段階で何をしているのでしょうか?
私が見た本では、セクションのマージだけを行っている・・・ような事が書いてあったのですが・・・
では、ダイナミックリンカローダが起動した後に、再配置とシンボル解決が行なわれているんですかね?
手順も再配置 → シンボル解決という順番になっているんですかね?
2、シンボル解決は、外部のライブラリとのシンボルを解決するためのものですよね?
(例えば、printf()など)
内部のシンボルは、アセンブルの段階でアドレスと紐付けているのでしょうか?
その場合、シンボルテーブルには、アセンブルの段階で解決出来なかったシンボルの情報のみが乗っていることになりますよね?
しかし、よく考えるとリンカの段階でアドレスを付けるんですよね?
アセンブルの段階で各命令や各シンボルにアドレスを付ける作業って含まれるのでしょうか?
リンカってすごいですね!!魔法のプログラムみたいですね!
どなたか教えてください。
[追記]
スタティックリンクの場合、オブジェクトファイルの中に含まれていたリローケーション情報、シンボルテーブルはリンク終了後に削除されるようですが、ダイナミックリンクの場合でも同じくダイナミックリンカローダーによるリンク終了後これらの情報は削除されるのでしょうか?
実行の直前ですね。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/19 12:25
2017/06/19 12:38
2017/06/19 12:42
2017/06/19 13:04
2017/06/19 13:20