logoalt Hacker News

HelloAssembly The smallest possible complete Windows application

65 pointsby Bluesteintoday at 11:40 AM35 commentsview on HN

Comments

rfgplktoday at 4:51 PM

"smallest possible" is exactly one instruction; possibly 0xc3 [ret] or 0x90 [nop]; the problem lies in how you define "complete Windows application", because the answer really differs depending on if you want to make it ABI compliant. But there's nothing preventing you from creating a custom loader/executor that reads a pure binary file, maps it as exec and runs it.

abcd_ftoday at 4:22 PM

The smallest meaningful program for MS-DOS was exactly 2 bytes:

  FA F4
That's CLI HLT, which effectively deadlocked the machine. Had to be saved as a .com fule obviously, not as an .exe.
ggerulestoday at 2:52 PM

Windows and assembly is a fun topic!

Putting the search terms "Windows" and "assembly language" turns up all sort of books. The one that got me to initially explore the topic (from 1993).... [0]

For a more up to date treatment of assembly and windows.... comes with source code for the IDE also. Ray Seyfarth's book [1].

[0] Windows Assembly Language & Systems Programming: Object Oriented & Low-Level Systems Programming in Assembly Language for Windows 3.X

[1] Introduction to 64 Bit Windows Assembly Language Programming: Fourth Edition ISBN-13: 978-1543138849, ISBN-10: 1543138845

hauntertoday at 1:04 PM

Meanwhile in the Unix world you can go as low as 45 bytes https://www.muppetlabs.com/~breadbox/software/tiny/teensy.ht...

show 3 replies
delta_p_delta_xtoday at 12:35 PM

Interesting to bypass CRT and work directly against the Windows API. That said, these rely on USER.32.DLL and KERNEL32.DLL to do the majority of the heavy lifting.

It's a bit like 'smallest hello world in assembly' but the code is just setting up the calling convention and then passing the zero-terminated character string into `write`. Cool, but that could be done a bit more straightforwardly in C, too. A lot of assembly (including in the linked repository) is book-keeping for the platform's calling convention.

show 2 replies
WillAdamstoday at 12:31 PM

For more of the same (though I wish source was available) which actually does something useful, see the various small utilities at

https://www.grc.com/freepopular.htm

show 1 reply
eggytoday at 12:29 PM

I should try FASM to see if it produces a smaller size exe. COM files are small, but 16-bit DOS was the thing back in the day - 100H yeah and basically a memory dump.

show 1 reply
hnea3ekp5itoday at 2:53 PM

Appreciate you writing it up

drdexebtjltoday at 12:32 PM

The developer, Dave Plummer, left Microsoft to develop and distribute malware and scams in the 90s. See previous thread at [1].

Nowadays he spreads misinformation disguised as war stories from his time at Microsoft.

[1]: https://news.ycombinator.com/item?id=39813625

show 5 replies
taf2today at 12:18 PM

love this and it's timely as I think with AI more of my code will just be native assembly for example: https://github.com/taf2/tic-tac-toe my m series native assembly based tic tac toe windowed game... very portable too you just simply execute codex --yolo port my app to x y z host...

show 1 reply