GCC输出文件的大小似乎太大了

时间:2018-03-22 03:12:36

标签: c windows gcc compilation filesize

我有以下代码(file.c):

int main() {}

我去gcc file.c,输出文件file.exe 26.5KB
我还尝试使用-O2-Ofast-Os但尺寸保持不变。我没有包括任何标题,没有;我甚至尝试过int main(void) {}

输出文件不应该大致 1KB 吗? [我正在使用Windows 10 - GCC 4.8.1]

上下文

我试图了解PE文件在Windows中是如何工作的,到目前为止,我认为我对这个概念有很好的把握,所以我想运行一些测试,因为我希望能够从另一个文件中获取代码,让我们说file2.exe,并尝试使用 OllyDBG 将其隐藏在file.exe内。但由于这个非常多的NULL代码产生了一个非常强大的 26.5KB ,我真的不知道该怎么做......

1 个答案:

答案 0 :(得分:0)

有很多项目被添加到文件中以使其可执行。

在以下示例中,在Linux 16.04上

gcc版本:gcc(Ubuntu 5.4.0-6ubuntu1~16.04.9)5.4.0 20160609

我在一篇文章中写了以下来源 文件名为untitled2.c

int main(void)
{

}

然后将其编译为untitled2.o

gcc -ggdb  -Wall -Wextra  -Wconversion -std=gnu11 -pedantic -Wmissing-prototypes  -c untitled2.c   -o untitled2.o -I. 

然后将其链接到untitleed2

gcc -ggdb  -std=gnu11 -o untitled2 untitled2.o  

以下是结果。

-rw-r--r-- 1 rkwill root      22 Mar 21 20:41 untitled2.c
-rw-rw-r-- 1 rkwill rkwill  2608 Mar 21 20:41 untitled2.o
-rwxrwxr-x 1 rkwill rkwill 16904 Mar 21 20:41 untitled2

即。原始源文件是22个字节。编译后的文件为2608字节(无优化参数),可执行文件为16904字节

strip文件(删除调试信息)会略微减小文件大小,但不足以消除大小上的显着差异。