Hacker News new | past | comments | ask | show | jobs | submit login
How statically linked programs run on Linux (2012) (thegreenplace.net)
107 points by arunc on Oct 25, 2014 | hide | past | favorite | 7 comments



Eli Bendersky's blog. It gets reposted on HN quite often and with very, very good reason. It's an absolute treasure trove of technicalia. I've spent many hours deep in his articles. On all sorts of cool technical topics, like parsers, debuggers, cool language features, abstract math...

And I'm sure I'm not the only frequenter of HN that loves this stuff.


The diagram showing the stack on program entry misses the auxiliary vector[0].

As a sidenote, I find stack diagrams more intuitive (for typical descending stacks) when the low address is drawn at the top. This way it looks like a real-world stack and if you need to represent some data or executable code in the same address space it will appear in natural order, from top to bottom.

[0] http://articles.manugarg.com/aboutelfauxiliaryvectors.html


Yep, I omitted it for simplicity in the diagram, though I do mention it later on.


Does Linux just map the executable into memory, and then let it load memory fault by memory fault? Or is the entire executable, or some large portion therof, loaded at startup?


The loader mmap()s the file and it's demand-paged in.


As I commented there: http://garrett.damore.org/2014/09/modernizing-less.html what's worse is that BSS and data pages are faulted in, so just to startup the OS has to page in multiple times, just to read/write those globals that people love so much... It would be much much better to make no use whatsoever of globals (i.e. put everything on the stack in main() )...


Love the articles on linux internals, I wish there were more coming in HN




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: