objcopy用于将object的部分或全部内容拷贝到另一个object,从而可以实现格式的变换。
objcopy可用用于将文件转换成S-record格式或者raw二进制格式。
例如,
xxxx-elf-objcopy –O srec test.o test.s19
则将test.o转换成s-record文件中。通常涉及到text段。
xxxx-elf-objcopy –O binary test.o test.bin
则将test.o转换成raw binary文件格式。
当将object文件转换成raw binary格式时,通常将去除掉symbols和relocation信息。在生成s-record过程中,有时需要用选项“-S”,“-R”去除掉binary文件,s-record文件不需要的相应信息。
此外,还需要注意到使用objcopy不能够改变大、小endian。
选项 |
Desc |
infile/outfile |
源文件/目标文件 |
-I bfdname --input-target=bfdname |
输入文件的bfdname,可取值elf32-little,elf32-big等,可用用objdump –I查看相应的信息 |
-O bfdname --output-target=bfdname |
输出文件的bfdname |
-F bfdname --target=bfdname |
指定输入、输出文件的bfdname,目标文件格式 |
-j sectionname --only-section=sectionname |
只将由sectionname指定的section拷贝到输出文件 |
-R sectionname --remove-section=sectionname |
去除掉由sectionname指定的section |
-S --strip-all |
去掉源文件的符号信息和relocation信息 |
-g --strip-debug |
去除掉调试符号信息和相关的段 |
-K symbolname --keep-symbol=symbolname |
保留由symbolname指定的符号信息 |
-N symbolname --strip-symbol=symbolname |
去除掉由symbolname指定的符号信息 |
-G symbolname --keep-global-symbol=symbolname -L symbolname --localize-symbol=symbolname -W symbolname --weaken-symbol=symbolname -w --wildcard -x --discard-all -X --discard-locals |
处理符号 |
-b byte --byte=byte |
每byteth byte中保留1 byte |
-i interleave --interleave=interleave |
每隔interleave字节拷贝1 byte |
--gap-fill val |
在section中填充val |
--set-start val |
设定新文件的start address |
--change-start incr --adjust-start incr |
调整start address |
--change-address incr --adjust-vma incr |
调整所有sections的VMA(virtual memory address)和LMA(linear memory address)。 |
--change-section-address section{=,+,-}val --adjust-section-vma section {=,+,-}val |
调整指定section的VMA/LMA地址 |
--set-section-flags section=flag |
指定指定section的flag,flag的取值可以alloc,contents, load, noload, readonly, code, data, rom, share, debug |
--add-section sectionname=filename |
添加一个section,该section的内容为filenmae的内容 |
--rename-section oldname= newname[,flags] |
更改section的名 |
-V --version |
objcopy的version number |