GNU Binary Utilities - objcopy简单介绍

7 篇文章 0 订阅

摘要

objcopy命令是将目标文件(elf文件)的一部分或者全部内容拷贝到另外一个目标文件中,也可以实现目标文件的格式转换。objcopy依赖GNU BFD库来读写文件,需要注意的是在两种不同格式之间拷贝可重定位的目标文件可能有异常。

objcopy在做转换的时候会创建临时文件,然后将这些临时文件删除。objcopy使用BFD做转换工作。如果没有明确地格式要求,则objcopy将访问所有在BFD库中已经描述了的并且它可以识别的格式。

注意:objcopy工具不能用来改变文件的大端和小端属性。使用时请注意objcopy 所能支持的机器架构,及目标文件格式。

使用示例

objcopy --info(同objdump -i)  显示当前objcopy支持的芯片架构与目标文件格式

一般在x86-64架构下,目标文件格式为:elf64-x86-64;芯片架构为i386

objcopy --add-section mysection=hello_text main main.add

在原elf文件中添加一个mysection的段,这个段内容指定为hello_text文件;

objcopy -j mysection main.add section_hello

将原elf中某一段拷贝出来,输出为一个elf文件,section_hello文件中还是包含mysection段,其实相当于把除了mysection其他的段删除,生成一个新的elf文件。

Q: 如何将一个二进制文件,比如图片,词典一类的东西做为.o文件,直接链接到可执行文件内部呢?
A:

$ objcopy -I binary -O elf32-i386 -B i386 14_95_13.jpg image.o

$ gcc image.o tt.o -o tt

$ nm tt | grep 14_95

0805d6c7 D _binary_14_95_13_jpg_end

00014213 A _binary_14_95_13_jpg_size

080494b4 D _binary_14_95_13_jpg_start

llvm-strip 就是llvm-objcopy  ,一般使用 --strip-unneeded 进行strip 

常用指令:

head 查看文件内容

strings 查看文件中字符

readelf -S main.o 查看elf文件头信息

objdump -ht main.o 查看elf文件头信息及段表

参考链接:

objcopy命令_Linux objcopy命令使用详解:实现目标文件的格式转换

objcopy (GNU Binary Utilities)

https://www.cnblogs.com/dylancao/p/10039036.html

https://www.cnblogs.com/yangguang-it/p/7061759.html

https://www.cnblogs.com/openix/archive/2012/04/08/2437384.html

Linux命令学习手册-objcopy - 知乎

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值