什么是我的exe文件中的所有垃圾信息?

时间:2017-12-16 21:40:26

标签: c exe

我使用dev c ++ v5.11(用c语言编写了一个非常简单的程序),我想看看HxD中的编译代码,看看它与原始代码的比较。问题是大约95%的编译信息看起来像垃圾信息,它似乎采用了9行代码并将其扩展到127 kb文件,有许多空格,错误处理字符串和一个包含许多空格的部分类型声明,以字符串格式。我的问题是,为什么这是一个东西,我可以使用什么其他程序来编译代码只要它需要?

原始代码:

#include <stdio.h>
int main() {
    int count = 0;
    start:
        count = count + 1;
        printf("count is %d\n", &count);
        goto start;
    return 0;
}

编译的代码太大而无法放入正文

2 个答案:

答案 0 :(得分:2)

任何完整的答案都将特定于您的编译器,以及您构建程序的方式和主机系统。我将专注于一般性问题。

使用调试信息进行编译并且没有优化(通常是编译器的默认设置)将在可执行文件中产生大量额外信息。此外,还有链接选项,例如相关的静态链接和动态链接,它控制将库中的信息复制到可执行文件中(可执行文件的大小,依赖于可在运行时访问的库等等) )。

您的系统上可能还有一些实用程序(例如unix下的strip)可以从可执行文件中删除一些不需要的信息。

答案 1 :(得分:1)

您可能会发现这篇文章很有趣,它试图为Linux可执行文件获取尽可能小的可执行文件大小:http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html

我想你的大部分可执行文件都是使用stdio.h include中的代码。

您也可能对查看汇编输出感兴趣,而不是在HxD中查看它,您可以使用Visual Studio中的/ fa开关获取它。您可以在Project-&gt; Properties-&gt; Configuration Properties-&gt; C / C ++ - &gt; Output Files下找到此设置。