Hacker News new | past | comments | ask | show | jobs | submit login
The dissection of a simple “hello world” ELF file (github.com/mewrev)
109 points by giuscri on Nov 28, 2015 | hide | past | favorite | 11 comments



Another ELF diagram also made the rounds a few years ago: https://code.google.com/p/corkami/wiki/ELF101

It's more of a 1-page poster and doesn't have the longer explanations in the submitted github article.


I was hoping someone would post this, because I had lost the bookmark! Thanks!


Here's a similar write up I did about Mach-O (iOS / OS X): https://www.objc.io/issues/6-build-tools/mach-o-executables/


Awesome, thanks for sharing this.


The last sentence of the first paragraph really struck me

>In general, no single section has both write and execute permissions as this could compromise the security of the system.


You can read more about it here: https://en.wikipedia.org/wiki/W%5EX


Thank you!


Is that actually enforced in modern linux kernels? I thought it would be possible to call

    mmap(..., PROT_READ | PROT_WRITE | PROT_EXEC, ...)


If this ever gets enforced it could be annoying for software that generates code at runtime, which may require quick access to some run-time data for particular instructions. It may be useful to force huge pages for dynamically generated code to improve pressure on the TLB. It can slow down code generation if the pages with code in it have to be converted to write and then converted back to execute every time a new bit of dynamic code gets added. Additionally, if the generated code instructions require access to a bit of dynamic data, it may not be able to actually reach a separate data page using immediate offsets to pc on some architectures (e.g. ARM).


OpenBSD kernel enforces it (even inside the kernel, not just user mode processes):

http://marc.info/?l=openbsd-tech&m=142120787308107&w=2


Mike Larkin re:W^X a few days ago:

https://youtu.be/A7vtAAeW6zo




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

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

Search: