【问题标题】:Linux - Getting ELF Data for Linux UtilityLinux - 获取 Linux 实用程序的 ELF 数据
【发布时间】:2018-03-28 22:20:05
【问题描述】:

我正在尝试获取 Linux 系统实用程序的 ELF 数据(Section Header Table,SHT)。

我注意到,当编译这些程序以创建对象 (.o) 文件时,我可以为自己的程序获取此信息。我还设法通过readelf 获得bash 的SHT,方法是输入:

readelf -l /bin/bash

但是,它不适用于某些实用程序,例如 gunzip。例如,我想输入如下内容:

readelf -S tar -czvf large_file.tar.gz large_file.dat

并获得一组执行属性,如下图所示:

有人知道如何实现吗?

提前致谢, 亚历山大。

【问题讨论】:

  • 请记住,gunzip 是 Ubuntu 17.10 中的 shell 脚本,因此 readelf 将不起作用。除此之外,请始终尝试提供足够的详细信息以重现您的确切问题。在这种情况下,那就是:您的操作系统版本和 gunzip 版本是什么?在这种情况下,我不知道立即发生了什么,但尝试使用 GCC 的“strip”或调试数据选项和一个最小的 hello world。最后,如果您使用的是开源操作系统,请查看您的发行版为 GCC 提供了哪些选项来编译 gunzip 以了解发生了什么。
  • 谢谢,西罗。我会记住这一点的。

标签: linux elf


【解决方案1】:

readelf 的手册页显示它希望接收 ELF 二进制文件的路径作为其参数,而不是像 tar -czvf large_file.tar.gz large_file.dat 这样的完整命令。

要查找 tar 的 ELF 数据,请执行以下操作:

which tar
readelf -S <path to tar binary>

在我的系统上,tar 的路径就是/bin/tar

【讨论】: