This is actually a lot of fun. Never did it on Linux, but Windows PE EXE files make similar tricks possible. Windows 95 in particular was very permissive. Using a (very primitive, by today's standards) hex editor I tried making the ".text" section begin halfway through the header and bang! ..it worked, a revelation of sorts. I imagine today's loaders may be a bit more strict because of security but I guess you can always make your own loader :)
The program described in this article is as simple as possible. What about something more complex, like basic "hello world"? It requires at least one more syscall and several bytes more data.
Part 2: https://www.muppetlabs.com/~breadbox/software/tiny/revisit.h...
Discussed here a couple months ago: https://news.ycombinator.com/item?id=48654411
Part 3: https://www.muppetlabs.com/~breadbox/software/tiny/somewhat....
This is actually a lot of fun. Never did it on Linux, but Windows PE EXE files make similar tricks possible. Windows 95 in particular was very permissive. Using a (very primitive, by today's standards) hex editor I tried making the ".text" section begin halfway through the header and bang! ..it worked, a revelation of sorts. I imagine today's loaders may be a bit more strict because of security but I guess you can always make your own loader :)
I wonder how much of this could be done by a clever linker? There’s a lot of skill in there but how would an llm do, for the rest of us?
First experience with proper ELFs was using PS2 Linux ELFs to run homebrew and games and get past Sony’s restrictions
The program described in this article is as simple as possible. What about something more complex, like basic "hello world"? It requires at least one more syscall and several bytes more data.
Take a look at the collections by the same author:
https://www.muppetlabs.com/~breadbox/software/tiny/home.html
There are some more complete programs there.
i386 are perhaps starting to die out. Has anything like this been done for amd64? Can we play such tricks with arm and aarch64?
84 byte aarch64 ELF: https://tmpout.sh/2/14.html
Lot of useful info here! Good work!