由于我是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代码都存在问题。
答案 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>
这将产生纯二进制输出。