What is the difference between elfutils and binutils
目录
Table of Contents
1 What is the difference between elfutils and binutils
根据维基百科的介绍,elfutils 被描述为“Ulrich Drepper 编写了 elfutils,以取代 GNU Binutils,专门为 Linux 开发,并仅支持 ELF 和 DWARF 格式”。
elfutils 是一个红帽项目。
elfutils(如 eu-addr2line、eu-elflint、eu-findtextrel、eu-nm、eu-readelf、eu-size、eu-strip 等)与 binutils(addr2line、nm、readelf、size、strip、objdump 等)有相当大的重叠。
elfutils 的作者 Ulrich Drepper 提到了以下差异,
- 与 binutils 相比,elfutils 工具
- 体积更小
- 速度更快(通常是数倍)
- 更少的错误
- 功能更丰富
- 一些 binutils 中没有的工具被广泛使用
- 还有一些工具使用了 elfutils 库(如 systemtap、frysk 等)
2 eu-stack vs gdb
eu-stack
仅用作显示可执行文件或者 core 文件的堆栈,速度非常快。 gdb 是一个完整的调试器,速度相对慢。
3 eu-strip vs strip
eu-strip
比 strip
更灵活,可以将抽符号表与将符号表保存一步完成:
|
|
以上命令将 a.out 中的符号表段和调试信息段都移出到 a.debug 文件中。这样,a.out 的 size 会减小很多。而此时,a.out 中会多一个 .gnu_debuglink
段,它是用来保存符号表位置的。之后,再用 gdb 去打开并运行 a.out 时,gdb 还可以找到 a.debug 这样的符号表及调试信息文件。
使用 strip
也能完成同样的任务,但是需要配合名 objcopy
命令,需要多个步骤完成:
|
|
4 eu-addr2line vs addr2line
前者速度飞快。。。