Linux系统工具ELF数据获取问题:无法读取部分工具的SHT信息
解决无法读取gunzip/tar等工具ELF段头表(SHT)的问题
我来帮你理清这个问题——你犯了一个很容易混淆的命令格式错误,同时可能对工具的实际文件类型有点误解。
核心问题:你的命令格式完全错了
你尝试执行的readelf -S tar -czvf large_file.tar.gz large_file.dat是把readelf的参数和tar的执行命令混在一起了。readelf需要直接接收ELF文件的路径作为目标,而不是跟着工具的执行参数。这里tar被readelf当成了要分析的文件名,而-czvf这些参数readelf根本不识别,自然会报错。
正确的操作步骤
要获取tar、gunzip这类系统工具的ELF段头表,按照下面的步骤来:
找到工具的绝对路径
先用which命令确定工具的安装位置,比如:which tar which gunzip通常会输出类似
/usr/bin/tar或/usr/bin/gunzip的路径。验证文件是否为ELF可执行文件
有些工具可能是符号链接(比如gunzip经常是gzip的软链接)或者shell脚本,这时候它们本身不是ELF文件,自然没有段头表。用file命令验证:file /usr/bin/gunzip如果输出包含
ELF 64-bit LSB executable这类内容,说明是ELF文件,可以用readelf分析。执行readelf获取段头表
把第一步得到的绝对路径传给readelf -S,比如:readelf -S /usr/bin/tar readelf -S /usr/bin/gunzip这样就能正常输出目标工具的段头表信息了。
补充说明
- 如果发现工具是符号链接(比如
gunzip -> gzip),直接分析链接指向的原文件即可,比如readelf -S /usr/bin/gzip。 - 你自己编译的
.o目标文件和/bin/bash能正常读取,是因为你直接给了readelf正确的文件路径,没有混入其他命令的参数。
内容的提问来源于stack exchange,提问作者Alexander Verner
相关产品推荐
相关产品推荐

