GNU Binary Utilities - objcopy简单介绍

【ARM 嵌入式 编译系列 6 -- GCC objcopy, objdump, readelf, nm 详细使用介绍】 objcopy 是 GNU二进制工具集(binutils)的一部分,主要用于复制和转换目标文件。在ARM GCC中,通常用于从链接后的ELF格式文件中提取出二进制文件或其他格式的内容,这对于嵌入式开发特别有用,因为这样的文件可以直接烧写到微控制器的闪存中。GCCobjdump用于显示关于目标文件的信息。这些信息包括文件的头部信息、节区内容、符号表、重定位入口点等。使用objdump可以对二进制文件进行深入分析,这对于调试和理解程序的工作原理非常有用。 阅读详情

摘要

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 - 知乎

nm readelf objdump objcopy 命令之间的关系 objdump, readelf, nm, 和 objcopy 是 GNU Binutils 套件的一部分,它们用于处理二进制文件。objdump: 这是一个能够提供各种信息的程序,包括反汇编输出、源代码交叉引用等。更具体地说,它能够读取并解析二进制文件,然后以人类可读的形式显示这些信息。例如,它可以显示出二进制文件的所有头信息,包括文件的大小、段的数量和类型等。此外,它还能显示二进制文件的每个段的内容,包括段内的机器码和对应的汇编代码。readelf: 这个程序用于显示 ELF 格式文件的详细信息。 阅读详情

相关推荐

交叉编译链安装及工具集(gcc、readelf、objdump、objcopy和strip等)使用方法

主要解决编译链程序和目标程序运行环境不同的问题,如在x86环境上使用编译工具进行编译汇编链接,而生成的程序需要运行在ARM开发板上。

sinat_32152141的博客 9094

GNU objcopy命令的探索:(转换二进制文件)

linux objcopy命令的高级技巧:使用它来创建和操作文件的特殊元素

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 4106

【ARM 嵌入式 编译系列 10.4 -- GNU Binary Utilies】

GNU Binary Utilities(简称 Binutils)是由 GNU 项目维护的一组编程工具,用于处理可执行代码,包括汇编、链接及其他开发操作。这些工具对于处理目标文件(Object Files)、可执行文件(Executables)、库文件(Libraries)等非常有用。

CodingCos的博客 1281

objcopy命令介绍

为什么80%的码农都做不了架构师?>>> ...

weixin_34236497的博客 1万+

GCC编译原理与实战:从预处理到链接的完整流程解析

编译器是将高级语言转换为机器指令的核心工具,其本质是一套确定性、可验证的转译系统。GCC通过前端解析、中间表示(GIMPLE)、后端生成的三层架构,实现C/C++等语言到x86、ARM、RISC-V等架构的精准映射。这一过程涵盖预处理、编译、汇编、链接四大阶段,每步都影响调试能力、性能表现与安全边界。理解GCC不仅关乎命令行选项(如-O2、-g、--sysroot),更涉及GNU工具链协同(Binutils、GDB、Make)及交叉编译实践。掌握其原理,才能精准定位undefined reference、o

dejz8829的专栏 542

Clang编译STM32F407:嵌入式LLVM工具链搭建与实战指南

嵌入式编译器从GCC向Clang迁移,本质是构建基于LLVM中间表示(IR)的现代工具链。Clang并非简单替代,而是通过统一IR、增量编译、确定性符号解析等底层机制,解决大型MCU项目中链接缓慢、调试失步、静态分析缺失等工程痛点。其技术价值体现在可验证性(如MISRA-C合规检查)、可扩展性(clang-tidy/clang-format集成)和可协同性(CI/CD与LLDB深度适配)。典型应用场景包括车规级电机控制、AUTOSAR Adaptive迁移、Unity测试框架接入及QEMU+ASan内存安全

weixin_33866037的博客 381

GNU Binary Utilities的笔记

写一下关于GNU Binary Utilities的笔记 首先就先罗列一下相应的工具与功能吧,描述可能不准确,目前权当笔记 addr2line:  根据程序的函数地址来在symbol里面查找函数名的 ar: 用来生成管理静态链接库(.a)的的工具 ranlib: 静态链接库(.a)的索引生成 as: 用来汇编的相关工具 c++filt: 给c++的symbol取

zephyrusYang的专栏 716

解决远程开发中glibc版本不兼容问题:patchelf实战指南

glibc(GNU C Library)是Linux系统核心运行时,其ABI兼容性直接影响二进制程序能否正常加载。当VSCode或Cursor等现代编辑器在CentOS 7、Ubuntu 16.04等老旧系统上因‘GLIBC_2.28 not found’报错时,本质是目标二进制与系统glibc版本存在ABI断层。传统方案如升级系统glibc风险极高,LD_LIBRARY_PATH被Electron沙箱屏蔽,容器化则破坏远程调试上下文。此时,patchelf工具配合精简独立glibc构成轻量级、用户态、零权

weixin_34345753的博客 395

GNU Binary Utilities

GNU Binary Utilities Table of Contents Introduction1 ar 1.1 Controlling ar on the Command Line1.2 Controlling ar with a Script 2 nm3 objcopy4 objdump5 ranlib6 size7 strings8 strip9 c++filt

Rain的专栏 811

TruckSim与Simulink联合仿真中的车轮转角精确控制策略

本文深入探讨了TruckSim与Simulink联合仿真中实现车轮转角精确控制的关键策略。针对多轴车辆路径跟踪时转角指令失灵的常见问题,核心在于正确配置TruckSim转向轴的外部输入模式(Advanced Settings),并确保仿真接口的稳定搭建。文章详细解析了从单轴到多轴协同转向的配置方法,并提供了提升MPC路径跟踪精度的实战技巧与调试经验。

weixin_29035147的博客 367

Matlab2018a崩溃解决的办法No sandbox or build area path

Matlab 2018a (No sandbox or build area path)出现崩溃后需要使用terminal进行如下操作: cd /home/david/MySoft/MATLAB/R2018a/bin/glnxa64 (你的matlab路径) mkdir exclude mv libfreetype* exclude/ 执行后图片如下: 如果你用的Windows系统,请手动按照上面步骤剔除了dll。 Matlab 2018a (No sandbox or build are

David Xiao 1万+

C/C++编程可用的Linux自带工具

GNU Binary Utilities或binutils是一整套的编程语言工具程序,用来处理许多格式的目标文件。当前的版本原本由在Cygnus Solutions的程序员以Binary File Descriptor library(libbfd)所撰写。这个工具程序通常搭配GCC、make、和GDB这些程序来使用。 相关网址:https://www.gnu.org/software/binu

一见 8190

手把手教你学Simulink--单相逆变器模糊逻辑控制策略仿真

本文介绍了在Simulink中设计单相逆变器模糊逻辑控制策略的完整流程。主要包括:1)构建单相逆变器模型;2)使用FuzzyLogicToolbox设计模糊控制器,定义输入输出变量和模糊规则;3)将控制器集成到Simulink模型;4)添加干扰源和示波器;5)配置仿真参数并分析结果。该方法利用模糊控制处理非线性系统的优势,可实现输出电压的精确跟踪,具有良好的鲁棒性。文中提供了详细的步骤说明和示例代码,强调准确设计隶属函数和规则库对控制性能的关键作用。该仿真设计为电力电子控制系统的开发提供了有效支持。

MHD0815的博客 200

Clang编译STM32F407嵌入式程序的工程实践与优化

Clang作为LLVM前端编译器,其基于中间表示(IR)的分层架构和可验证优化特性,为资源受限型MCU开发提供了超越传统GCC的确定性控制能力。其核心原理在于将C/C++源码转化为与目标无关的LLVM IR,在此层面实施Loop Unrolling、Dead Code Elimination等标准化优化,并通过ARM后端精准lowering为Thumb-2指令,尤其在Cortex-M4上实现更紧凑的代码生成与更可控的寄存器分配。技术价值体现在Flash体积压缩(实测减小5.2%)、栈保护开销降低、静态分析友

weixin_34195546的博客 227

【C/C++ 性能优化】了解cpu 从而进行C++ 高效编程

在当代软件开发领域,CPU(Central Processing Unit,中央处理器)的性能优化一直是一个核心议题。尤其是对于C++开发者而言,无论是在Linux平台还是其他操作系统中,都需要深刻理解CPU的工作原理以及如何充分利用CPU资源,以确保软件运行的高效性和稳定性。正如计算机科学家Donald Knuth在《计算机程序设计的艺术》中所说:“过早的优化是万恶之源”,然而,这并不意味着我们应该忽视性能优化——相反,我们需要在正确的时间以正确的方式进行优化。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 4748

CANape a2l文件的编辑教程

编辑a2l文件

wsq119的博客 1万+

Oh My Paper Codex插件安装与使用指南:与Claude Code的差异全解析

**Oh My Paper** 是一个把终端变成「自主科研实验室」的 Claude Code 插件,覆盖文献调研、实验执行、论文写作的全流程。它同时提供一套 **Codex 插件**(`oh-my-paper-codex`),让 Codex CLI 也能复用同一套科研流水线。本文将带你完成 Codex 插件的一键安装,并逐项对比它与 Claude Code 插件的差异,帮你 3 分钟选对工具。🔬

gitblog_00820的博客 328

基于Simulink环境,提供一个关于如何对EMI抑制的DC-DC变换器进行仿真建模的示例

EMI定义:电磁干扰是指任何能中断、阻碍、降低或限制电气设备有效性能的电磁能量。重要性合规性:确保产品符合国际和地方的EMC标准。可靠性:减少因外部或内部EMI导致的系统故障风险。挑战滤波设计:合理设计输入输出滤波器以抑制传导EMI。布局与接地:良好的PCB设计对于减少辐射EMI至关重要。屏蔽:使用金属屏蔽来保护敏感电路不受外界干扰。首先明确要模拟的任务内容。设计一个能够在高频操作下有效抑制EMI的DC-DC变换器。根据工作频率和谐振元件值确定合适的滤波器参数。

xiaoheshang_123的博客 146

编译与调试完全指南—第1章 编译工具集概览

本文摘要了《编译与调试完全指南》第1章的核心内容,系统介绍了Linux下的编译工具链生态系统。主要内容包括: 编译工具链全景 详细解析了GCC编译器、标准库(libstdc++/glibc)和二进制工具集(binutils)的组成与协作关系 分类介绍了binutils中的编译相关工具(as/ld/ar等)和分析工具(objdump/readelf/nm等) 展示了从源代码到可执行文件的完整工具链协作流程图 GCC编译的四个阶段 预处理:宏展开、头文件包含、条件编译处理 编译:语法检查、C代码转汇编 汇编:汇

weixin_43149888的博客 961

ICC2:使用analyze_lib_cell_placement检查lib cell的pass rate

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?在place之前需要使analyze_lib_cell_placement命令去检查lib cell在当前的site row/power plan/legalize设置的环境下能够正常place和legalize。下面分享一个脚本去报告pass rate低于2%的lib cell。

m0_61544122的博客 674

【GEOS-Chem模拟教程第二期下】全球生物质燃烧 GFAS 数据配置

本博客详细介绍全球生物质燃烧 GFAS 数据下载及在 GEOS-CHEM 模型中的配置

WW、forever的博客 1394

Keil工程迁移到STM32Cube IDE完整实战指南

在嵌入式开发中,软件工程的可移植性往往决定了团队的协作效率与产品的迭代速度。不同IDE背后是编译工具链、工程文件格式和芯片支持包的系统性差异,理解这些差异,是安全完成代码迁移的前提。以STM32项目为例,Keil MDK与STM32Cube IDE的切换,本质上是ARM编译器到GCC工具链、分散加载文件到链接脚本、PACK包到固件包的全面替换。基于HAL库的项目因为外设驱动层与应用层解耦,迁移时仅需重建工程骨架并迁移应用代码,即可实现跨平台构建并接入自动化流水线。当项目需要长期维护、多人协作或后续更换国产芯

weixin_33910759的博客 330

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

GD32F407 MCU编译烧录仿真全流程解析

嵌入式MCU开发本质是软硬协同的数据形态跃迁过程:源码经编译生成可重定位目标文件,再通过链接脚本映射为带地址的可执行镜像(如ELF),最终转换为烧录格式(BIN/S19)写入Flash,并在硬件调试器或软件仿真器中验证运行态行为。这一链条涉及启动文件、链接脚本、Flash算法、时钟树配置等关键技术点,任一环节偏差(如GD32向量表地址错配、S19地址偏移缺失、Wokwi外设模型时序简化)都会导致‘能编译但烧不进’或‘烧进了却不响应’。掌握编译→烧录→仿真三阶段的数据流向与失败信号,是打通从代码到物理设备的关

weixin_33816946的博客 357

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

STM32N6570-DK上部署 object detection dog

本文介绍了基于STM32N6570-DK开发板的Object Detection模型训练与部署流程。主要内容包括:1) 搭建GPU开发环境(Miniconda+TensorFlow 2.10.1);2) 配置STEdgeAI工具链并修改N6开发板加载配置文件;3) 选择SSD MobileNetV2 FPNLite作为目标检测模型。文章详细记录了环境配置步骤、CUDA验证方法以及STEdgeAI工具的路径设置要点,为在STM32嵌入式设备上部署目标检测模型提供了完整的开发指南。

weixin_45444963的博客 290

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

STM32F103 AB分区OTA实战:从单区风险到工业级安全升级

AB分区OTA是一种面向嵌入式设备的高可靠性固件升级机制,其核心在于通过物理隔离的双Flash区域(A/B区)构建可验证、原子性切换与自动回滚的能力。它并非简单复制代码,而是依赖对中断向量表重映射、SysTick重定向、NVIC配置及Flash编程时序等底层原理的深度掌控。相比传统单区IAP,AB方案显著提升升级容错能力,避免断电或固件缺陷导致设备变砖,在工业温控、电机控制、Modbus从机等STM32F103典型场景中已成为量产刚需。本实践聚焦标准库v3.50下的真AB实现,覆盖内存布局、Bootload

weixin_34342207的博客 310
上一篇: C++声明、定义、初始化
下一篇: 跨平台结构体字节对齐问题
chwit
博客等级 码龄9年 47粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值