2

我的文件是 bootpack.c,里面有一个函数void f() { while(1); }。我想直接将它生成为可执行的机器代码。所以我像这样编译它:

gcc -c -nostdinc -fno-builtin bootpack.c
ld -nostdlib file.o -o bootpack.bin

但我发现 bootpack.bin 是 3.84KB。我想它应该只有几个字节,因为它只是一个循环。怎么了?以及如何正确生成这个文件?

4

2 回答 2

1

您可以将binary其用作 GNU(基于 BFD)链接器的输出格式:

ld -nostdlib file.o --oformat=binary -o bootpack.bin

然后,您可以使用以下方法对其进行拆卸:

objdump -b binary -m i386 -D bootpack.bin

(用您的目标架构代替i386)。

于 2012-09-20T17:55:08.410 回答
0

因为它包含符号表信息,所以要减小可执行文件的大小可以使用 strip 命令。

将其用作“strip --strip-all executable-file-name”,这样它将删除符号表等额外信息。即使在 gcc 选项 -s 中可以使用,gcc 中还有更多选项可以使用。

于 2012-09-20T15:24:20.833 回答