Objcopy,它如何进行二进制输出?
Posted
技术标签:
【中文标题】Objcopy,它如何进行二进制输出?【英文标题】:Objcopy, how it makes binary output? 【发布时间】:2012-07-23 20:13:17 【问题描述】:由于我是 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
总而言之,我需要二进制文件only,其中包含 .text 和 .data 段以及 32 位代码。
1. 这样我能得到我想要的吗?
2.还有其他方法吗? (无论更简单或更复杂)
感谢您的帮助。
我编译 Asm 代码没有问题,几乎所有 C 代码都有问题。
【问题讨论】:
【参考方案1】:当我遇到ld
手册页和/DISCARD/
块时,据说会从最终输出中排除其中列出的所有内容。
所以我在.text
、.data
和.bss
块之后插入了这个块
/DISCARD/ :
*(.comment)
*(.eh_frame)
*(.note.GNU-stack)
以及我的链接器脚本开头的这一行。
OUTPUT_FORMAT("binary")
因此,我不再需要使用objcopy
。
【讨论】:
【参考方案2】:您需要使用此命令编译源文件
nasm -o bin <SOURCE FILES>
这将产生纯二进制输出。
【讨论】:
nasm 只是一个汇编程序,它对项目中的 C 源文件无能为力...以上是关于Objcopy,它如何进行二进制输出?的主要内容,如果未能解决你的问题,请参考以下文章
objcopy 之后以二进制形式出现的额外数据......它来自哪里?
使用 objcopy 将文本文件添加到二进制文件,但 objcopy 抱怨架构