小编Arn*_*e97的帖子

如何使用MinGW创建微小的PE(Win32)可执行文件

我有以下C程序:

#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. */
}
Run Code Online (Sandbox Code Playgroud)

我使用以下命令行使用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
Run Code Online (Sandbox Code Playgroud)

生成的.exe文件长度为2048字节.如何使用MinGW将其缩小,最好是1024字节,或者(甚至更好)最多512字节?

我更喜欢没有编写汇编代码的解决方案,但我也对组装解决方案感兴趣.

我试图-Wl,-N减少部分(段)的数量,但是在Wine中运行.exe时会导致段错误.

该文章认为,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", …
Run Code Online (Sandbox Code Playgroud)

c winapi mingw portable-executable

7
推荐指数
1
解决办法
1233
查看次数

标签 统计

c ×1

mingw ×1

portable-executable ×1

winapi ×1