logo
Kurashizu Blogwhere ideas flow
  • Home
  • News
  • Blog
  • About
  • Home
  • News
  • Blog
  • About

© 2026 Kurashizu. All rights reserved.

Admin·New Post·Service Status
Powered by Cloudflare·05.11.26
← Back to news

HelloAssembly The smallest possible complete Windows application

Original article
github.com|70 points|37 comments|by Bluestein|Aug 25, 2026

HelloAssembly: Crafting the Minimalist Windows Application

This project, hosted by PlummersSoftwareLLC, is an exploration into the absolute limits of executable size for the Windows platform. The objective is to create the smallest possible complete application using x86 Assembly (ASM).

The project was inspired by and featured in two episodes of Dave's Garage:

  1. "Retrocoding the World's Smallest Windows App in x86 ASM"
  2. "C vs ASM: Making the World's SMALLEST Windows App"

Hello, Assembly! Retrocoding the World

🎯 Project Objectives

The goal is to produce a non-compressed binary that fulfills the following criteria:

  • Implement a functional Windows message loop.
  • Feature a standard title bar.
  • Include working Minimize, Maximize, and Close buttons.
  • Provide a functioning system menu.
  • Render a background with centered text (at least as large as the phrase "Dave's Tiny App").

📁 Repository Architecture

The source code is organized into several directories based on the technique used:

  • TinyOriginal: Contains an optimized version of the initial codebase.
  • Lasse: Utilizes shell coding strategies to reduce size.
  • Theron: Features a manually constructed PE (Portable Executable) header.
  • QRCode: This is dead code; it was an experiment to embed the .exe into a QR code, kept for historical purposes.
  • Crinkler: A specialized compressing linker for tiny binaries.
  • templates & tools: Supporting files for the build process.

⚠️ Security Warning

Important: The optimization techniques used in the Lasse directory and the Crinkler linker are highly aggressive. Because these methods mimic patterns often found in malware, your antivirus software may flag the resulting binaries as "suspected malware."

Depending on your security suite, you may experience the following:

  • F-Secure SAFE: May require you to whitelist or exclude the executable.
  • Microsoft Defender: May require a temporary total disablement of the scanner.

Disclaimer: Disabling security software is done at your own risk. While this repository contains no malicious code, we cannot vouch for binaries obtained from third-party sources.

🛠️ Build Instructions

1. Using Plain MASM32

The code in the Lasse folder can be compiled using MASM32 11.0. Use the following command:

ml /coff LittleWindows.asm /link /merge:.rdata=.text /merge:.data=.text /align:4 /subsystem:windows LittleWindows.obj →\rightarrow→ Result: LittleWindows.exe

2. Using MASM32 with Crinkler

Crinkler is a linker designed for executables only a few KB in size. For best results, use the Windows 10 SDK version 10.0.20348.0.

For the Lasse directory:

ml /c /coff LittleWindows.asm
crinkler.exe /NODEFAULTLIB /ENTRY:start /SUBSYSTEM:WINDOWS /TINYHEADER /NOINITIALIZERS /UNSAFEIMPORT /ORDERTRIES:1000 /TINYIMPORT /LIBPATH: "C:\Program Files (x86)\Windows Kits\10\Lib\10.0.20348.0\um\x86" kernel32.lib LittleWindows.obj

→\rightarrow→ Result: out.exe

For the TinyOriginal directory:

ml /c /coff /IC:\masm32\include Tiny.asm
crinkler.exe /ENTRY:MainEntry /SUBSYSTEM:WINDOWS /TINYHEADER /NOINITIALIZERS /UNSAFEIMPORT /ORDERTRIES:2000 /TINYIMPORT /LIBPATH: "C:\Program Files (x86)\Windows Kits\10\Lib\10.0.20348.0\um\x86" kernel32.lib user32.lib gdi32.lib Tiny.obj /OUT:tiny.exe

→\rightarrow→ Result: tiny.exe

3. Using Yasm

The Theron directory requires Yasm (a BSD-licensed NASM rewrite). Download the "general use" version.

yasm -fbin -o HelloWindows.exe HelloWindows.asm →\rightarrow→ Result: HelloWindows.exe

C vs ASM: Making the World

📊 Size Comparison

The efficiency of a build can be represented by the formula: Total Size=PE Header+Code Section+Import Table\text{Total Size} = \text{PE Header} + \text{Code Section} + \text{Import Table}Total Size=PE Header+Code Section+Import Table

As of March 11, 2023, the smallest working versions are:

Source FileLinker UsedSize (Bytes)
Lasse\LittleWindows.asmMASM321104
Lasse\LittleWindows.asmCrinkler818
TinyOriginal\Tiny.asmCrinkler540
Theron\HelloWindows.asmYasm383