我的文件是 bootpack.c,里面有一个函数void f() { while(1); }
。我想直接将它生成为可执行的机器代码。所以我像这样编译它:
gcc -c -nostdinc -fno-builtin bootpack.c
ld -nostdlib file.o -o bootpack.bin
但我发现 bootpack.bin 是 3.84KB。我想它应该只有几个字节,因为它只是一个循环。怎么了?以及如何正确生成这个文件?
我的文件是 bootpack.c,里面有一个函数void f() { while(1); }
。我想直接将它生成为可执行的机器代码。所以我像这样编译它:
gcc -c -nostdinc -fno-builtin bootpack.c
ld -nostdlib file.o -o bootpack.bin
但我发现 bootpack.bin 是 3.84KB。我想它应该只有几个字节,因为它只是一个循环。怎么了?以及如何正确生成这个文件?
您可以将binary
其用作 GNU(基于 BFD)链接器的输出格式:
ld -nostdlib file.o --oformat=binary -o bootpack.bin
然后,您可以使用以下方法对其进行拆卸:
objdump -b binary -m i386 -D bootpack.bin
(用您的目标架构代替i386
)。
因为它包含符号表信息,所以要减小可执行文件的大小可以使用 strip 命令。
将其用作“strip --strip-all executable-file-name”,这样它将删除符号表等额外信息。即使在 gcc 选项 -s 中可以使用,gcc 中还有更多选项可以使用。