HelloAssembly:最小完整 Windows 应用
HelloAssembly The smallest possible complete Windows application
HelloAssembly 项目致力于构建无需压缩即可运行的最小完整 Windows 应用程序。该项目源自 Dave's Garage 的 Retrocoding 系列,通过 x86 汇编语言实现,包含标题栏、最小化、最大化及关闭按钮等完整功能。代码库提供了多个版本,包括使用 MASM32、Crinkler 链接器以及手动编写 PE 头部的 Theron 版本。其中,Theron 版本利用 Yasm 汇编器,将可执行文件体积压缩至惊人的 383 字节。值得注意的是,由于优化策略激进,部分杀毒软件可能会误报为恶意软件,用户需自行判断是否添加白名单或临时关闭防护。
该项目的目标是制作一个无需压缩的最小应用程序,同时具备运行 Windows 消息循环、功能完整的标题栏按钮以及居中绘制文本等特性。
HN 评论区
51- abcd_f
MS-DOS 上最小的有意义程序恰好是 2 个字节:
FA F4
这就是 CLI HLT 指令,实际上会让机器死锁。显然必须保存为 .com 文件,不能是 .exe。
- rfgplk
“尽可能小”其实就是一条指令;可能是 0xc3 [ret] 或 0x90 [nop];问题在于你如何定义“完整的 Windows 应用程序”,因为答案真的取决于你是否需要符合 ABI。但没有什么能阻止你创建一个自定义的加载器/执行器,读取纯二进制文件,将其映射为可执行并运行。
- delta_p_delta_x
绕过 CRT 直接调用 Windows API 挺有意思。不过话说回来,这些代码主要依赖 USER.32.DLL 和 KERNEL32.DLL 来完成大部分繁重工作。
这有点像“汇编语言中最小的 Hello World”,但代码只是设置调用约定,然后将以零结尾的字符串传递给 `write`。很酷,但这用 C 语言也能做得更直接。很多汇编代码(包括链接仓库里的)其实都是在处理平台调用约定的簿记工作。
- haunter
与此同时,在 Unix 世界里,你可以做到低至 45 字节 https://www.muppetlabs.com/~breadbox/software/tiny/teensy.ht...
- ggerules
Windows 和汇编是个有趣的话题!
搜索关键词“Windows”和“assembly language”会跳出各种书籍。让我最初探索这个话题的那本(1993 年出版).... [0]
对于更现代的汇编与 Windows 讲解.... 还附带了 IDE 的源代码。Ray Seyfarth 的书 [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