【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 – 符号表与可执行程序分离详细讲解

你可能感兴趣的:(#,ARM,GCC,编译系列介绍,GNU,elfutils,readelf,介绍,objdump,介绍,nm,介绍,en-unstrip,en-strip,en-elfint)