Objcopy,它是如何产生二进制输出的?

时间:2012-07-23 20:13:17

标签: compilation binaryfiles binutils objcopy

由于我是binutils的新手,gcc ant其他人,我有一些一般性的问题,我在手册中找不到的问题。

我正在使用C和汇编(nasm语法),我需要输出上的原始二进制文件。首先,我将代码编译为带有参数的objec文件:

cc -nostartfiles -nostdlib -c -ffreestanding <input file(s)> ;cc or gcc no matter

然后我使用简单的脚本链接所有文件,该脚本只按需要的顺序放置段。

ld -T <script> -o <o.file> <in.file(s)>  ;nothing special here

要获得原始二进制文件我使用objcopy

objcopy -O binary <o.file> <in.file> ;can't be simplier

总而言之,我需要二进制文件 ,其中包含.text和.data段以及32位代码。

1.我可以这样得到我想要的吗?

2.还有其他方法吗? (无论更简单还是更复杂)


感谢您的帮助。


编译Asm代码时没有问题,几乎所有C代码都存在问题。

2 个答案:

答案 0 :(得分:0)

我遇到一个ld手册页,据说/DISCARD/块从最终输出中排除了其中列出的所有内容。

所以我在.text.data.bss块之后插入了这个块

/DISCARD/ : 
{
    *(.comment)
    *(.eh_frame)
    *(.note.GNU-stack)
}

在我的链接描述文件的最开头就是这一行。

OUTPUT_FORMAT("binary")

因此,我不再需要使用objcopy

答案 1 :(得分:-2)

您需要使用此命令编译源文件

nasm -o bin <SOURCE FILES>

这将产生纯二进制输出。