A good walkthrough, but it doesn't mention how the ELF headers are interpreted and how the corresponding file sections (code, data, rodata) are mapped into the virtual address space of the process. It only covers the setup of the stack and the invocation of main.
The first thing I thought of when I saw the article title here was “How programs get run”[1], a series on LWN; the second installment[2] describes the ELF parts of the story.
(The exposition in his two-parter “Anatomy of a system call”[3,4] is similarly brilliant.)
If all you want is a non-Linux-specific description of how to write a static ELF loader (which is surprisingly simple), you can also take a look at the description on the OSDev Wiki[5] (but be mindful of the somewhat uneven code quality on that website) and at Libelf by example[6] (but libelf may be a bit too much abstraction than you really need if you’re trying to understand the format itself).
The source code to the kernel's elf "binfmt"[0] is very readable. The elf binfmt is registered (along with a few others like `binfmt_misc`) and you get dispatched there via `exec_binprm`[1] which is invoked by the `execve` syscall[2]. When loading a shared library, you also dispatch to a binfmt via the `uselib`[3] syscall.
It used to be available online for free at <https://www.iecc.com/linker/>, but isn't any more.
You could get it from archive.org though, and I think I've seen mirrors in other formats on Hacker News in previous discussions about the book.
Yes; but there's also descriptions of legacy container formats no one cares about any more. I still recommend it and have my own copy, I just recall skipping over quite a bit of material.
If you're interested in or already comfortable with Rust, Amos (fasterthanlime) has a nice long-form series that goes into this, basically building a custom ELF loader in the end. The writing style isn't everyone's cup of tea, but maybe you like it: https://fasterthanli.me/series/making-our-own-executable-pac...
It’s not about my brand of humor, any comment that is just a quip is unsubstantial and against community guidelines here. What exactly is the point of your comment other than to try and make us more like Reddit, the website HN was designed to not be.