GOTとpltについて確認したいことがあるんですが・・・
GOTは共有ライブラリの関数群のポインタ(アドレス)を示している。
→ 共有ライブラリがメモリ上に展開された時のライブラリが持つ仮想メモリのアドレス。
pltはGOTのアドレスと1つのプロセスのアドレスを紐付けるためのテーブル。
GOTを参照してプロセスへそのアドレスを提供している。
個々のプロセスが持つテーブルである。
と理解しているのですが・・・
間違っていますか??
もしかして逆かなぁ・・・と思ったのですが、どうでしょうか?
実験をしてみました。
以下のはgccでコンパイルした実行ファイルを逆アセンブルしたものです。
printf()@pltです
4003e0: ff 25 12 05 20 00 jmpq *0x200512(%rip) # 6008f8 <GLOBAL_OFFSET_TABLE+0x18>
4003e6: 68 00 00 00 00 pushq $0x0
4003eb: e9 e0 ff ff ff jmpq 4003d0 <_init+0x28>
jmpq *0x200512(%rip) のところなのですが、プログラムカウンタを 0x200512にジャンプさせていると思ったのですが、実際には 0x6008f8のアドレスに飛んでいました。
なぜですか??
この0x200512とは何者ですの?
0x6008f8はGOTのアドレスで間違いなさそうなのですが・・・
どなたか教えてください。
またPICとはpltのコードの事ですよね??

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/16 01:21
2016/09/16 01:37
2016/09/16 01:47
2016/09/16 02:00
2016/09/16 02:55
2016/09/16 03:02
2016/09/16 08:54
2016/09/17 01:33