一、objcopy命令
objcopy命令是GNU binutils工具包中的一个工具,它可用于创建一个有特殊排列和格式的目标文件或者可执行文件。objcopy也可以将目标文件和可执行文件中的某些部分拷贝到新的文件中,或创建一个空的目标文件或可执行文件。该命令是一个多功能工具,下面我们分别来讲述一些常用的用法。
二、objcopy bin文件
有时候我们需要将二进制文件中的某些内容通过objcopy命令提取出来,包括从目标二进制文件中提取出某一特定段(如:.text
、.data
、.rodata
、.bss
等部分)。objcopy命令可以通过-s
和-O binary
两个选项将目标文件的段提出来,生成一个独立的二进制文件。例如:
$ objcopy -O binary -j .text input.o output.bin
这个命令会将 input.o
文件中的 .text
段提取出来,生成一个名为 output.bin
的独立二进制文件。
三、objcopy 二进制
我们有时需要将一个采用某种二进制文件格式的文件转换为另一种二进制文件格式,例如将一个ELF文件转换成COFF文件。此时,我们可以使用objcopy命令来完成文件格式的转化。举个例子:
$ objcopy -I elf32-little -O binary input.elf output.coff
这个命令不仅可以将ELF文件转化为COFF格式的文件,也可以将Mach-O、PE/COFF文件转成ELF格式的文件。其中,-I
选项表示输入文件格式,-O
选项表示输出的格式。这样,我们就可以实现不同二进制文件格式之间的互相转换。
四、objcopy elf转bin
有时我们需要将ELF文件转换为独立的二进制文件。下面是一个使用objcopy进行ELF转换为二进制文件的例子:
$ objcopy -O binary input.elf output.bin
这个命令将 input.elf
文件转成了独立的二进制文件 output.bin
。
五、objcopy -O选项
objcopy命令有一个-O
选项,可以指定输出文件格式。objcopy支持的输出文件格式种类众多。下面是一些常见输出文件格式:
1. ELF格式的输出文件
$ objcopy -O elf32-littlearm input.elf output.elf
这个命令将输入文件 input.elf
转化为ELF格式的输出文件 output.elf
。
2. IEEE 695格式的输出文件
$ objcopy -O ihex input.elf output.hex
这个命令将输入文件 input.elf
转换为IEEE 695格式的输出文件 output.hex
。
3. 可执行二进制文件格式的输出文件
$ objcopy -O binary input.elf output.bin
这个命令将输入文件 input.elf
转化为可执行二进制文件格式的输出文件 output.bin
。
4. SREC格式的输出文件
$ objcopy -O srec input.elf output.srec
这个命令将输入文件 input.elf
转化为SREC格式的输出文件 output.srec
。
5. 格式为Motorola S-Record的输出文件
$ objcopy -O srec input.elf output.s19
这个命令将输入文件 input.elf
转化为Motorola S-Record格式的输出文件 output.s19
。
总之,objcopy命令的-O
选项可以让开发者方便地将同一种二进制文件通过不同的格式,如SREC、I8HEX、ELF和Binary,进行不同的转化。