大佬教程收集整理的这篇文章主要介绍了如何使用MinGW创建微小的PE(Win32)可执行文件,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#include <windows.h> void __cdecl mainCRTStartup() { DWORD bw; HANDLE hfile = GetStdHandle(STD_OUTPUT_HANDLE); WriteFile(hfile,"Hello,World!\r\n",15,&bw,0); ExitProcess(0); /* Needed for successful (0) exit. */ }
我使用以下命令行使用GCC 4.8.2编译它:
i686-w64-mingw32-gcc -s -Os -fno-ident -fno-stack-protector -fomit-frame-pointer \ -fno-unwind-tables -fno-asynchronous-unwind-tables -falign-functions=1 \ -mpreferred-stack-boundary=2 -falign-jumps=1 -falign-loops=1 -mconsole \ -nostdlib -nodefaultlibs -nostartfiles -o h.exe h.c -lkernel32
生成的.exe文件长度为2048字节.如何使用MinGW将其缩小,最好是1024字节,或者(甚至更好)最多512字节?
我更喜欢没有编写汇编代码的解决方案,但我也对组装解决方案感兴趣.
我已经尝试过-Wl,-N来减少部分(段)的数量,但是在Wine中运行.exe时会导致段错误.
这article表明可能有480个字节.它使用以下设置:
#pragma comment(linker,"/FILEALIGN:16") #pragma comment(linker,"/ALIGN:16")// Merge sections #pragma comment(linker,"/MERGE:.rdata=.data") #pragma comment(linker,"/MERGE:.text=.data") #pragma comment(linker,"/MERGE:.reloc=.data") #pragma optimize("gsy",on)
不幸的是,这些#pragmas不适用于MinGW GCC.有等价物吗?
在here年,我能够找到海湾合作委员会的旗帜
-Wl,– section-alignment,16,– file-alignment,它将.exe大小降低到752字节. .exe似乎适用于Wine.
到了modifying the linker script,我能够合并.data和.rdata,并下载到736字节.我除了上面的那些之外还使用这些GCC标志:-Wl,-T,Tinygccpe.scr.
我仍在寻找MinGW相当于/ MERGE.
@L_944_11@类似,但它不会尝试低于9000字节.
我也在寻找一个剥离工具(MinGW中的Strip命令不会进一步减小.exe大小)可以删除DOS存根(在偏移量0x40和0x80之间,它包含这个程序不能在DOS下运行) mode.,我们可以节省64个字节). This code可以删除它,但它也会破坏.exe中的所有绝对偏移量.不幸的是,MinGW中的链接器ld无法删除DOS存根,它在文件bfd / peXXigen.c中硬编码,就在NT_SIGNATURE之上.
每个版本的32位和64位Windows对PE .exe可执行文件中接受的标头值都有不同的规则.例如,Windows XP拒绝带有导入的32位.exe文件,除非它们至少有3个部分,并且它们的部分对齐是4096,并且它们的文件对齐是2的幂至少512.(i686-w64-mingw32-gcc问题中的命令生成此类可执行文件.)Windows 7接受这些.exe文件,但它也接受带有0个部分的.exe文件,部分对齐4,文件对齐4.
> hh2.golden.exe(402字节)适用于Windows XP,Windows 7及更高版本.
> hh4.golden.exe(268字节)在Windows XP上不起作用,适用于Windows 7及更高版本.
>汇编源代码包含在pts-tinype repo中.
小于268字节的.exe文件仅适用于Windows XP之前的Windows版本,并且它们不适用于64位Windows系统.
相关文献:
> https://www.codejuggle.dj/creating-the-smallest-possible-windows-executable-using-assembly-language/
> http://pferrie.host22.com/misc/tiny/pehdr.htm
> https://drakopensulo.wordpress.com/2017/08/06/smallest-pe-executable-x64-with-every-byte-executed/
> http://www.phreedom.org/research/tinype/
> http://www.pouet.net/topic.php?which=9565
> http://www.crinkler.net/
> https://code.google.com/archive/p/corkami/wikis/PE.wiki
以上是大佬教程为你收集整理的如何使用MinGW创建微小的PE(Win32)可执行文件全部内容,希望文章能够帮你解决如何使用MinGW创建微小的PE(Win32)可执行文件所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。