我有以下代码(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 ,我真的不知道该怎么做......
答案 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
文件(删除调试信息)会略微减小文件大小,但不足以消除大小上的显着差异。