返回

文章详情

HelloAssembly 最小的完整 Windows 应用程序

Hacker News2026年8月25日 11:40

这是最小的完整 Windows 应用程序。摘自 Dave's Garage 的一集 "Hello, Assembly! Retrocoding the World's Smallest Windows App in x86 ASM" 及后续集 "C vs ASM: Making the World's SMALLEST Windows App": 代码库中的介绍: 优化后的版本在 "TinyOriginal" 文件夹中。 应用了 shell 编码技巧的版本在 "Lasse" 文件夹中。 使用手动编写的 PE 头的版本在 "Theron" 文件夹中。 二维码是死代码,原本是将 exe 嵌入二维码中,保留仅仅是为了后代。 该项目的目标是制作最小的应用程序,无需压缩,具备以下特性: 能运行 Windows 消息循环。 具有标题栏、最小化、最大化和关闭按钮,且这些功能都正常工作。 具有与之相同的系统菜单。 绘制背景和一些居中于中间的文本,文本长度等于或大于 "Dave's Tiny App"。请保持可读性,并在注释中解释你在做什么!越小越好! 关于病毒扫描仪的注意事项: 在 Lasse 目录中的当前代码嵌入的优化,以及 Crinkler 一般应用的优化(如果使用的话)相当激进,似乎类似某些类型恶意软件使用的策略。因此,你的病毒扫描仪可能会将你根据源代码构建的可执行文件标记为 “可疑恶意软件”。这可能导致无法启动它们,或者你的病毒扫描仪甚至会将它们隔离。根据你使用的杀毒解决方案,可能可以将可执行文件列入白名单/排除,以恢复它们并使其正常工作(已知 F-Secure SAFE 会发生这种情况)。也有可能你必须暂时完全禁用病毒扫描仪(在 Microsoft Defender 中观察到过这种情况)。 请注意:决定是否要禁用病毒扫描仪完全是你的责任。如果你暂时禁用病毒扫描仪,我们强烈建议你在测试完根据本代码库构建的可执行文件后立即重新启用它。虽然我们承诺该代码库不包含任何恶意代码,但我们无法保证在其他来源获取的任何代码或可执行文件(如该代码库应用的假定构建)是否真的如此。如果你的病毒扫描仪在你尝试运行这个代码库的源代码生成的可执行文件时进行干预,并且你不想(部分)禁用你的病毒扫描仪,那么就不要这样做。我们理解这一点,我们绝不会因此责怪你。 :) 构建说明: 普通 MASM32: 在 Lasse 目录中的代码可以使用普通 MASM32 11.0 构建,此版本可以从多个来源获得。使用它的构建说明如下: ml /coff LittleWindows.asm /link /merge:.rdata=.text /merge:.data=.text /align:4 /subsystem:windows LittleWindows.obj 可执行文件将命名为 LittleWindows.exe。 MASM32 与 Crinkler: Crinkler 是一个针对 Windows 的压缩链接器,特别面向几千字节大小的可执行文件。这个工具的副本包含在本代码库的 Crinkler 目录中。它也可以从其 GitHub 仓库获取。Crinkler 需要安装 Windows SDK。最佳(即最小)结果是在 Windows 10 SDK 的版本 10.0.20348.0 中获得的。此工具和其他版本可以从 Microsoft 网站上的 Windows SDK 存档页面下载。安装后,使用它构建应用程序的说明如下: 在 Lasse 目录中的代码: 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 可执行文件将命名为 out.exe。 在 TinyOriginal 目录中的代码: ml /c /coff /IC:\m asm32\i nclude 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 可执行文件将命名为 tiny.exe。 Yasm: Theron 目录中的代码必须使用 Yasm 构建,Yasm 是基于 “新” BSD 许可证对 NASM 汇编器的重写。可以从 Yasm 项目下载页面获得;选择 "通用使用" 版本。假设汇编器已重命名为 yasm.exe。使用它的构建说明如下: yasm -fbin -o HelloWindows.exe HelloWindows.asm 可执行文件将命名为 HelloWindows.exe。 当前大小: 截至 2023 年 3 月 11 日已知的最小有效可执行文件大小如下: 程序 链接器 字节大小 Lasse\LittleWindows.asm MASM32 1104 Lasse\LittleWindows.asm Crinkler 818 Theron\HelloWindows.asm Yasm 383 TinyOriginal\Tiny.asm Crinkler 540

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡