GCC 输出文件的大小似乎太大
Posted
技术标签:
【中文标题】GCC 输出文件的大小似乎太大【英文标题】:GCC output file's size seems too big 【发布时间】:2018-03-22 03:12:35 【问题描述】:我有以下代码(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,我真的不知道该怎么办......
【问题讨论】:
不要添加--static
;你真的会吓坏的。
它什么也没做,我猜是因为我没有包含任何库
好吧,如果你对 PE 文件及其格式有很好的(或者更确切地说,非常出色的)知识,你总是可以尝试类似于this hack for ELF 的东西。我不推荐它,只是出于好奇。
我会检查一下,但是这个问题(看似过大的输出文件)已经困扰我多年了,直到现在我才有实际理由更彻底地寻找答案
顺便说一句,如果你想“偷偷”一些有效载荷到可执行文件中,检测原始文件是否更小不是更容易,因为这将是一个(相对)大的变化大小?
【参考方案1】:
有很多项被添加到文件中以使其可执行。
在以下示例中,在 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
I.E.原始源文件为 22 字节。编译文件为2608字节(无优化参数)可执行文件为16904字节
strip
文件(删除调试信息)会稍微减小文件大小,但不足以消除大小的显着差异。
【讨论】:
在编译行中使用-v
会告诉你更多关于正在发生的事情——特别是关于链接阶段使用的额外文件。以上是关于GCC 输出文件的大小似乎太大的主要内容,如果未能解决你的问题,请参考以下文章
用 gcc 编译 C 程序;无法打开输出文件 _.exe:没有这样的文件或目录