objcopy的使用

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

 

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

?
#include <stdio.h>
#include <bfd.h>
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 <stdio.h>
#include <stdlib.h>
extern char * _binary_main_c_start;
int main()
{
    printf ( "%s" , ( char *)&_binary_main_c_start);
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值