【问题标题】:Objcopy, how it makes binary output?Objcopy,它如何进行二进制输出?
【发布时间】: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 代码都有问题。

【问题讨论】:

    标签: compilation binaryfiles binutils objcopy


    【解决方案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 源文件无能为力...
      猜你喜欢
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多