当前位置: 首页 > news >正文

【ARM 嵌入式 编译系列 10.3 -- GNU elfutils 工具小结】

文章目录

    • 什么是 GNU elfutils?
      • GNU elfutils 常用工具有哪些?
      • objcopy 常用参数有哪些?
      • GNU binutils和GNU elfutils区别是什么?

上篇文章:ARM 嵌入式 编译系列 10.2 – 符号表与可执行程序分离详细讲解

什么是 GNU elfutils?

GNU elfutils是一个开源的工具集,用于处理ELF(Executable and Linkable Format)格式的可执行文件、目标文件和共享库。ELF是一种常见的二进制文件格式,常用于Linux和其他类Unix系统。

GNU elfutils 常用工具有哪些?

以下是一些 GNU elfutils工具的简要介绍和使用示例:

  • readelf:用于查看ELF文件的详细信息,如段表、符号表、重定位表等。例如:readelf -a binary_file;

  • objdump:用于反汇编ELF文件,显示二进制代码的汇编指令。例如:objdump -d binary_file;

  • objcopy:用于复制、转换和删除ELF文件的各种部分。例如:objcopy -O binary input output , 将ELF文件转换为裸二进制文件;

  • nm:用于显示ELF文件的符号表。例如:nm binary_file;

  • strip:用于从ELF文件中删除符号和调试信息,以减小文件大小。例如:strip binary_file;

  • eu-unstrip 可以用 eu-unstrip 将调试信息合并回二进制文件;

  • eu-strip 可以用eu-strip将调试信息从二进制文件中分离出来, 示例:eu-strip --strip-debug --remove-comment -f myfile.debug myfile, 使用--strip-debug选项移除了 myfile 中的调试信息,并使用-f选项将调试信息保存到了myfile.debug文件中。

  • eu-elflint 可以用来检查和修复ELF文件中的符号。eu-elflint --reloc-debug-sections myfile, 使用--reloc-debug-sections选项修复了myfile中的调试符号。

这些只是GNU elfutils工具集中的一部分工具, 具体使用可以见前面系列文章

objcopy 常用参数有哪些?

在编译脚本中我们经常可以看到 objcopy 命令,下面简单介绍下 objcopy 常用的参数:

  • --only-keep-debug选项用于从目标文件中提取调试信息。

例如:

objcopy --only-keep-debug myprog myprog.debug

在这个例子中,objcopy将myprog中的调试信息提取出来,并存储到myprog.debug文件中。

  • --add-gnu-debuglink选项用于将提取的调试信息文件链接回原始的二进制文件。

例如:

objcopy --add-gnu-debuglink=myprog.debug myprog

在这个例子中,objcopymyprog.debug文件链接回myprog文件。这样,即使myprog文件没有包含调试信息,调试器(如gdb)也可以找到调试信息。

GNU binutils和GNU elfutils区别是什么?

GNU binutils和GNU elfutils都是GNU工具集的一部分,都包含用于处理二进制文件的工具,但它们的重点和功能有所不同。

  • GNU binutils:这是一组用于处理二进制文件的程序集,包含了如ld(链接器)、as(汇编器)、objdump(反汇编等)、nm(列出符号表)、strip(剥离符号和调试信息)等工具。这些工具主要用于创建、修改和分析二进制文件。

  • GNU elfutils:这是一个库和工具集,重点放在处理ELF(Executable and Linkable Format)格式的二进制文件和DWARF(一种调试信息格式)。其中包含了如libelf(操作ELF格式的库)、readelf(显示ELF文件信息)、eu-strip(剥离符号和调试信息,但比binutils的strip更强大)等工具。elfutils主要用于更复杂、更深入的二进制文件分析和调试任务,比如处理调试信息。

总的来说,GNU binutils更关注通用的二进制文件操作,而 GNU elfutils则更关注ELF格式和调试信息的处理。在日常开发中,可能会同时用到这两个工具集。

上篇文章:ARM 嵌入式 编译系列 10.2 – 符号表与可执行程序分离详细讲解

http://www.lryc.cn/news/123480.html

相关文章:

  • 黑马项目一阶段面试 项目介绍篇
  • 重构内置类Function原型上的call方法
  • Nginx之lnmp架构
  • C# 使用FFmpeg.Autogen对byte[]进行编解码
  • websocket是多线程的嘛
  • CentOS7.9 禁用22端口,使用其他端口替代
  • 2023国赛 高教社杯数学建模ABCDE题思路汇总分析
  • 【网络层+数据链路层】深入理解IP协议和MAC帧协议的基本原理
  • 银行家算法【学习算法】
  • 萤石直播以及回放的接入和销毁
  • C语言易错知识点总结2
  • Go学习-Day1
  • 冠达管理:机构密集调研医药生物股 反腐政策影响受关注
  • 安装Tomac服务器——安装步骤以及易出现问题的解决方法
  • JVM 性能优化思路
  • Labview解决“重置VI:xxx.vi”报错问题
  • 2023河南萌新联赛第(五)场:郑州轻工业大学C-数位dp
  • 找不到mfc140u.dll怎么办?mfc140u.dll丢失怎样修复?简单三招搞定
  • 了解 Langchain️是个啥?:第 1 部分
  • Axure RP移动端高保真CRM办公客户管理系统原型模板及元件库
  • 【JAVA】我们常常谈到的方法是指什么?
  • 今天来给大家聊一聊什么是Hierarchical-CTC模型
  • cout还是printf?C++教程 - How to C++系列专栏第4篇
  • Linux NTP原理及配置使用
  • SAP系统是什么呢?它有哪些优势?
  • js数组学习(ES6+)
  • DoIP诊断入门
  • Amazon CloudFront 部署小指南(五)- 使用 Amazon 边缘技术优化游戏内资源更新发布...
  • undefined reference to `dlopen‘ ‘SSL_library_init‘ `X509_certificate_type‘
  • DHCPv6之GitHub项目Android侧验证