The PLT, Lazy vs Eager binding, and everything in between
Prologue
There are many posts out there explaning this mechanism, and while they are good, most of them focus on the exploitation part of the PLT and GOT and thus don’t explain glibc’s role in the process My goal here isn’t to explain the whole implementation of this mechanism in glibc, but rather provide key insights and direction to give a detailed yet overally complicated understanding of the process.
Any assembly here will be x86_64 AT&T syntax, but it’s the same gist for different architectures as well.