编程语言,使最小的可执行文件?

我正在寻找一种编程语言来生成最小的EXE文件。

除了附带的DLL以外,它还需要除下列操作系统以外的其他依赖项:发布Windows XP,Vista,7,8。例如,带有静态链接,Delphi,VB6,RealBasic等的C ++应用程序。

它也应该运行在2000以后的所有32位和64位英特尔+ AMD处理器上,只有一个EXE。

Solutions Collecting From Web of "编程语言,使最小的可执行文件?"

汇编! 它不能比这个小。

你不会找到这个答案。 C和程序集会给你一些你可以找到的最小的可执行文件,但是如果你不小心的话,它们也可以给你巨大的可执行文件。

所有的现代编译器都可以高效执行。

别担心。 选择最适合你的工作语言。

这取决于您使用的特定构建工具(编译器和链接器),以及配置和内容,而不是语言本身。

Visual C ++ 2010可以生成小的可执行文件,如果您使用普通的C并排除C运行时库。

如果您需要使用C运行时库,则可能需要尝试使用Visual C ++ 6(缺点:不支持)或mingw(缺点:生成技术上不受支持的可执行文件),这两者都使用Windows内置的运行时库XP及更高版本。

没有运行时库的Visual C ++ 2010的可执行文件大小为1K,最多512字节的代码和初始化数据。 这与工作的Windows可执行文件一样小,因为必须至少有一个节,最小节偏移和大小都是512字节。

一般来说,可执行文件大小为512字节的开销加上代码和初始化数据的大小,四舍五入为512字节的倍数。

要排除Visual Studio 2010中的运行时库,请在“链接器” – >“输入”下将“忽略所有默认库”设置为“是”,然后在链接器 – >高级下设置入口点(例如“NoCRTMain”)。 在这个配置中的主要功能的签名是

void __stdcall NoCRTMain() 

在“C / C ++ – >代码生成”中,您可能还需要将“缓冲区安全检查”设置为“否”。 缓冲区安全检查功能使用运行时库函数。

此时,如果您的代码和常量数据少于512个字节,则可执行文件的大小将为3K,如果已初始化非常量数据,则可执行文件的大小为3.5K。

您可以通过不包括清单(链接器 – >清单文件)保存另外512个字节。

您可以通过使图像不可重新定位来保存另外的512个字节。 在“链接器” – >“高级”中将“随机基地址”设置为“否”,“固定基地址”设置为“是”。

为了把它降低到1K,你需要合并代码,常量数据和初始化数据段。 要做到这一点,请在链接器 – >命令行下添加这些额外的命令行选项:

  /SECTION:.text,ERW /MERGE:".rdata=.text" /MERGE:".data=.text" 

出于安全原因,您可能更喜欢不合并初始化的数据部分; 这样做部分禁用数据执行保护(DEP)。 如果是这样,就使用

  /MERGE:".rdata=.text" 

或者在链接器 – >高级中设置等效的选项。

如果您没有合并所有部分,则可以通过将较小的默认MS-DOS存根替换为另一个512字节,从而将总体标头大小减小到512字节的最小对齐大小。 这可以通过添加/ STUB命令行选项(Linker-> Command Line)并使用这里提供的最小存根来完成 。 如果您愿意,可以通过提取任何Windows可执行文件的前64个字节来创建自己的最小存根。