Back to News
Advertisement
Advertisement

⚡ Community Insights

Discussion Sentiment

67% Positive

Analyzed from 985 words in the discussion.

Trending Topics

#windows#assembly#com#https#user#dll#www#crt#api#software

Discussion (37 Comments)Read Original on HackerNews

rfgplkabout 1 hour ago
"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.
QuantumNomad_38 minutes ago
It should be an exe file you can double click and execute.
abcd_fabout 2 hours ago
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.
ggerulesabout 3 hours ago
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

delta_p_delta_xabout 5 hours ago
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.

skrellmabout 5 hours ago
> That said, these rely on USER.32.DLL and KERNEL32.DLL to do the majority of the heavy lifting.

Since the low-level Windows kernel API is undocumented and non-public, using these system DLLs is your only option on Windows.

It's just like linking against libc.so on any POSIX systems.

Pannoniaeabout 2 hours ago
no, you can also call ntdll (or even syscalls although those aren't stable), there's plenty of documentation on the internet

but also why would you, not much point except for very niche functionality

munchlerabout 5 hours ago
It’s a minimal Windows app, so the whole idea is to rely on Windows DLLs as much as possible.
actionfromafarabout 5 hours ago
Officially, one should not use KERNEL32.dll for instance but go via crt. In practice, most interfaces are stable.
delta_p_delta_xabout 4 hours ago
KERNEL32.DLL (in spite of the name) provides user-mode system services for the Windows API. The CRT provides the C99 API. There are many entry points to the same thing on Windows; you can do any of `malloc`/`HeapAlloc`/`new`/`VirtualAlloc` to get a void* memory buffer. `malloc` is from the CRT; `HeapAlloc` is from KERNEL32.DLL, and `new` is from the C++ runtime.
neonz80about 5 hours ago
kernel32 is an official API, you're probably thinking of ntdll. CRT is the C-runtime. Not everything is written in C.
haunterabout 5 hours ago
Meanwhile in the Unix world you can go as low as 45 bytes https://www.muppetlabs.com/~breadbox/software/tiny/teensy.ht...
Someoneabout 4 hours ago
Unfair comparison. The Windows tool (FTA):

“Runs a Windows message loop Has a title bar, minimize, maximize, and close buttons, which all work as expected Has a system menu with the same Paints the background and some text centered in the middle, equal to or larger than "Dave's Tiny App"”

That Linux program:

“Let’s take an incredibly simple program, one that does nothing but return a number back to the operating system”

See https://archive.is/w01DO#selection-265.0-265.44 for a fairer comparison (97/133 bytes)

WalterGRabout 3 hours ago
97 bytes for Windows at the time this very nice walkthrough was written: http://www.phreedom.org/research/tinype/
Bluesteinabout 5 hours ago
Goodness gracious me.-
p00dlesabout 4 hours ago
I hope that expression makes a comeback.
Bluesteinabout 4 hours ago
You know? FOR ONE expression our current neuralese-spewing friends could standarize on - I'd not mind this one (and the ilk) becoming "load-bearing", again.-

PS. Honest take :)

WillAdamsabout 5 hours ago
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

Bluesteinabout 5 hours ago
Shields Up!
eggyabout 6 hours ago
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.
Bluesteinabout 6 hours ago
> 100H yeah and basically a memory dump

... the days! :)

hnea3ekp5iabout 3 hours ago
Appreciate you writing it up
drdexebtjlabout 5 hours ago
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

JoeDaDudeabout 5 hours ago
What about his contributions to human civilization? ;)

He got a world record score on the Tempest arcade game [1], then developed an AI which beat his own record[2]. His biggest failure was, that after rebuilding TEMPEST from arcade machine ROMS, he added levels to the game but never made them public [3].

[1]. https://www.youtube.com/watch?v=EuSMCWu02hA

[2]. https://www.youtube.com/watch?v=TdbpoDjIvPk

[3]. https://www.youtube.com/watch?v=BjsVSEbXDOM

silisiliabout 1 hour ago
It's frustrating, because he does do some cool things. But I had to quit following him because of his constant yarning about how he grew up not rich and made millions from Microsoft, so young people now are stupid and lazy.
Keyframeabout 3 hours ago
Dave Cutler was a guest in his garage and it was a great episode. That lands some gravity at least?
whobreabout 1 hour ago
Also Raymond Chen
skinfaxiabout 4 hours ago
My how the overton window has moved. Some of violative conduct is standard practice now.

> When consumers prepared to purchase a product, additional services and products including a $9.95 back-up disc and $4.95 ‘optional extended service’ plan appeared on the check-out form. The form also listed “one free year of updates” – selected by default – but the company was then authorized to automatically charge a consumer’s credit card at the end of the year unless the buyer cancels the update plan.

drdexebtjlabout 2 hours ago
But also things that are absolutely not okay:

> Inducing computer users to install software by misrepresenting that the user's computer is at risk for crashes or privacy and security invasions.

> Marketing its InternetShield software by means of a “free scan.”

> Using “buttons” in its advertisements that do not function as the user would expect them. For example, the X found in the corner of a window is normally associated with closing the window and should not open another ad. Installing software on a user’s computer that causes multiple pop-up advertisements when the user tries to close out of advertisements.

> Failing to provide a functional uninstall option for removing all software files.

> Failing to obtain a consumer’s explicit consent to purchase a product or a service.

skinfaxiabout 2 hours ago
Yes I thought I accounted for that with my use of "some". I wasn't intending to downplay anything.
rvzabout 5 hours ago
Do you have any evidence of these (unsubstantiated) claims against him?
drdexebtjlabout 5 hours ago
Edited with previous threads linking court documents.
TiredOfLifeabout 5 hours ago
He also lied about his contributions to Start menu
taf2about 6 hours ago
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...
eggyabout 5 hours ago
I haven't played with yolo yet. I'll have to use my airgapped, old Lenovo ThinkPad for this! Whenever I see yolo, I can't stop thinking of Joseph Redmon's YOLO and his astounding resume format!