383 Bytes: Die kleinste vollständige Windows-App der Welt
HelloAssembly The smallest possible complete Windows application
Das GitHub-Repository HelloAssembly von PlummersSoftwareLLC zeigt, wie man eine voll funktionsfähige Windows-Anwendung mit nur 383 Bytes erstellt – ohne Kompression. Die App bietet eine Titelleiste, Systemmenü, Hintergrundzeichnung und zentrierten Text. Das Projekt enthält mehrere Varianten, darunter eine mit manuell geschriebenem PE-Header und eine, die Shellcoding-Techniken nutzt. Die aggressiven Optimierungen können jedoch von Virenscannern als verdächtig eingestuft werden.
Bitte haltet den Code lesbar und erklärt in Kommentaren, was ihr tut – und je kleiner, desto besser!
- rfgplk
„Kleinstmöglich" ist genau eine Instruktion; möglicherweise 0xc3 [ret] oder 0x90 [nop]; das Problem liegt darin, wie man „vollständige Windows-Anwendung" definiert, denn die Antwort hängt wirklich davon ab, ob man sie ABI-konform machen möchte. Aber nichts hindert einen daran, einen benutzerdefinierten Loader/Executor zu erstellen, der eine reine Binärdatei liest, sie als ausführbar mapped und ausführt.
- abcd_f
Das kleinste sinnvolle Programm für MS-DOS war genau 2 Bytes:
FA F4
Das ist CLI HLT, was die Maschine effektiv zum Absturz brachte. Musste offensichtlich als .com-Datei gespeichert werden, nicht als .exe.
- ggerules
Windows und Assembly sind ein lustiges Thema!
Die Suchbegriffe „Windows" und „Assembly Language" ergeben alle möglichen Bücher. Das eine, das mich ursprünglich dazu brachte, das Thema zu erkunden (von 1993).... [0]
Für eine aktuellere Behandlung von Assembly und Windows.... kommt mit Quellcode für die IDE auch. Ray Seyfarths Buch [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_x
Interessant, das CRT zu umgehen und direkt gegen die Windows-API zu arbeiten. Das gesagt, diese verlassen sich auf USER.32.DLL und KERNEL32.DLL, um den Großteil der schweren Arbeit zu erledigen.
Es ist ein bisschen wie „kleinstes Hallo-Welt in Assembly", aber der Code richtet nur die Aufrufkonvention ein und übergibt dann den nullterminierten Zeichenstring an `write`. Cool, aber das könnte auch in C etwas unkomplizierter gemacht werden. Viel Assembly (einschließlich des im verlinkten Repository) ist Buchhaltung für die Aufrufkonvention der Plattform.
- haunter
Währenddessen kann man in der Unix-Welt auf nur 45 Bytes gehen https://www.muppetlabs.com/~breadbox/software/tiny/teensy.ht...