4

由于我是 binutils、gcc 和其他人的新手,所以我有一些一般性的问题,以及我在手册中没有找到的答案。

我正在使用 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 代码问题。

4

2 回答 2

0

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

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

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

以及我的链接器脚本开头的这一行。

OUTPUT_FORMAT("binary")

因此,我不需要再使用objcopy了。

于 2015-10-19T16:58:26.403 回答
-2

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

nasm -o bin <SOURCE FILES>

这将产生纯二进制输出。

于 2012-07-23T20:19:41.803 回答