Hacker News
Show HN: A (marginally) useful x86-64 ELF executable in 301 bytes
50 points by meribold
ago
|
11 comments
vparseval
|next
[-]
Love it! It's entirely inapplicable and useless to me but it embodies the spirit of Show HN and what the spirit of programming in the 80s and 90s was.
captn3m0
|next
|previous
[-]
I have a use for this: A somewhat portable one-liner to go in my waybar/sway/i3 configs!
emanuele-em
|next
|previous
[-]
301 bytes! The base64 one-liner install is a nice flex. Accepting an infinite loop when energy_full doesn't exist is peak code golf, perfectly reasonable when every byte counts. Is there a writeup on the assembly somewhere?
billforsternz
|root
|parent
|next
[-]
I would prefer avoiding the infinite loop and printing a message to help the user understand what went wrong. I'm sure you could do that with an extra 100 bytes or so. Just my opinion of course.
bregma
|next
|previous
[-]
As always with these admirable hacks, I feel compelled to point out these are not really ELF executables but just small files you can trick the x86_64 Linux kernel into loading.
I mean they're very clever and legit and kudos to the people who develop these exploits, but they're not ELF.
userbinator
|next
|previous
[-]
It doesn't even look like particularly optimised Asm (could immediately spot a few savings, despite how horrible GAS syntax is to read...), but is definitely not "compiler slop"[1] either, which shows just how inefficient the majority of programs actually are. Of course even the ELF header takes up a significant amount of space, but this reminds me of how PC magazines would print short listings of utilities like this, often a few dozen up to a few hundred bytes at most --- in DOS .COM format, which is headerless and thus pure machine instructions.
[1] In the late 80s and early 90s, the battle between those writing handwritten Asm and those using compiled HLLs has many similarities to AI-generated vs non-AI code today.
meribold
|root
|parent
[-]
If the savings are about `mov $1, %edi` and `mov $10, %ecx`, those 32-bit immediate values line up with the higher bytes of p_filesz and p_memsz in the program header, which have to be zero [1]. If not, what are the savings? :)
[1]: https://github.com/meribold/btry/commit/8ef5a4ce58ae73c489d2...