objcopy的使用

http://www.cnblogs.com/liqiongxiong/archive/2013/02/18/2916355.html

 

objcopy很方便的可以把文本文件做成连接器可以连接的对象,进而链进可执行程序里面。本质上objcopy用于将目标文件的一部分或者全部内容拷贝至另一个目标文件中,从而实现文件格式的转变。objcopy使用GNU BFD Library来读写目标文件,通过objdump -i可以查看到BFD库中描述的标准格式名,另外也可以使用以下的方法来获取BFD库中描述的标准格式名。

?
#include
#include
int main()
{
    const char **t = bfd_target_list();
    while (*t)
    {
        printf ( "%s\n" ,*t);
        t++;
    }
}

将代码保存为target.c文件,执行编译gcc -o target target.c -lbfd -liberty,生成target目标文件,运行后显示的信息和objdump -i显示的格式类型是一致的,如在我机器上显示的是:

?
elf32-i386
a.out-i386-linux
pei-i386
elf64-x86-64
elf64-little
elf64-big
elf32-little
elf32-big
srec
symbolsrec
verilog
tekhex
binary
ihex
trad-core

以下是一段自己打印自己的程序,使用命令objcopy -I binary -O elf32-i386 -B i386 main.c main.bin && gcc -o main main.c main.bin来进行编译,其中各选项说明如下:
[-I bfdname|--input-target=bfdname]
[-O bfdname|--output-target=bfdname]
[-B bfdarch|--binary-architecture=bfdarch]
objcopy根据main.c生成main.bin,再由gcc将main.c以及main.bin编译连接起来,注意上述是c文件而不是cpp文件,打开objcopy生成的main.bin文件,发现里面有三个符号_binary_main_c_start、_binary_main_c_end、_binary_main_c_size

?
#include
#include
extern char * _binary_main_c_start;
int main()
{
    printf ( "%s" , ( char *)&_binary_main_c_start);
}

你可能感兴趣的:(linux,学习)