以下dynamic linkのときの話.
セクション: 静的リンカーのための概念
セグメント: 動的リンカーやプログラム実行時の概念
.pltセクションは実行可能なセクションになっている.
.gotはよくわからん.
.got.pltは関数のアドレスだけが書いてある.
libcの関数のアドレス解決を必要なときに解決するためにある.(遅延バインディング)
例えばlibcのputs関数を呼ぶ際には.pltセクションにあるputs@pltをcallする.
puts@pltは.got.pltに書いてあるアドレスにjmpするだけ.
もし解決されていれば.got.pltにはlibcのputs関数のアドレスが書いてあるのでputs関数が呼ばれる.
まだ未解決の場合には「アドレス解決するための関数」のアドレスが書いてあるので,
そこにjumpして.got.pltが書き換えられることになる.