4 ms·
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
by bluetomcat 3y ago
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.
- 22SAS 3y agoAny good resources to learn about that?
- duped 3y agoThe book "Linkers an Loaders" by Levine is the Bible on the subject
- Findecanor 3y agoIt used to be available online for free at <https://www.iecc.com/linker/ 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.
- ndesaulniers 3y agoYes; 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.
- bluetomcat 3y ago"man 5 elf" should be the ultimate source of truth :-)
- convolvatron 3y agothe elf specification is: https://refspecs.linuxfoundation.org/elf/elf.pdf https://refspecs.linuxfoundation.org/elf/elf.pdf
- yrro 3y agoI've found that searching for stories with ELF in the title then trawling through the comments for the links is really informative.
- eddtests 3y agoI just hope they catch this Sauron before it’s too late…
- mimimi31 3y agoThere's a great summary from LWN[1] with lots of references and links to other articles for further reading. [1] https://lwn.net/Articles/631631 https://lwn.net/Articles/631631
- emidln 3y agoThe 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. [0] https://github.com/torvalds/linux/blob/9fdfb15a3dbf818e06be514f4abbfc071004cbe7/fs/binfmt_elf.c#L823 https://github.com/torvalds/linux/blob/9fdfb15a3dbf818e06be5... [1] https://github.com/torvalds/linux/blob/9fdfb15a3dbf818e06be514f4abbfc071004cbe7/fs/exec.c#L1764 https://github.com/torvalds/linux/blob/9fdfb15a3dbf818e06be5... [2] https://github.com/torvalds/linux/blob/9fdfb15a3dbf818e06be514f4abbfc071004cbe7/fs/exec.c#L1812 https://github.com/torvalds/linux/blob/9fdfb15a3dbf818e06be5... [3] https://github.com/torvalds/linux/blob/9fdfb15a3dbf818e06be514f4abbfc071004cbe7/fs/exec.c#L158 https://github.com/torvalds/linux/blob/9fdfb15a3dbf818e06be5...
- proto_lambda 3y agoIf 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-packer/ https://fasterthanli.me/series/making-our-own-executable-pac...
- dharmab 3y agoCPU Land is an accessible introduction. This chapter covers ELF https://cpu.land/becoming-an-elf-lord https://cpu.land/becoming-an-elf-lord
- mananaysiempre 3y agoThe 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). [1] https://lwn.net/Articles/630727/ https://lwn.net/Articles/630727/ [2] https://lwn.net/Articles/631631/ https://lwn.net/Articles/631631/ [3] https://lwn.net/Articles/604287/ https://lwn.net/Articles/604287/ [4] https://lwn.net/Articles/604515/ https://lwn.net/Articles/604515/ [5] https://wiki.osdev.org/ELF https://wiki.osdev.org/ELF [6] https://sourceforge.net/projects/elftoolchain/files/Documentation/libelf-by-example/ https://sourceforge.net/projects/elftoolchain/files/Document...