Very useful article! I wish I had read this a long time ago, would've made a lot of things much easier to understand.
I'd like to comment on this:
> When the relocations are complete, the dynamic linker allows any loaded shared object to execute optional initialization code. This functionality allows the library to initialize internal data and prepare for use.
> This code is defined in the .init section of the ELF image. When the library is unloaded, it may also call a termination function (defined as the .fini section in the image).
There are huge problems with this stuff. Are these sections still used? I know you can add functions to these sections with a GCC attribute but I don't know why anyone would do that. Do other languages like C++ use these sections?
https://blogs.oracle.com/solaris/post/init-and-fini-processi...