Linux 如何获取源代码路径&&;ELF文件中的文件名(与-g匹配)?

Linux 如何获取源代码路径&&;ELF文件中的文件名(与-g匹配)?,linux,elf,Linux,Elf,我想通过ELF文件获取源代码路径和源代码名,.debug\u str部分包含我需要的内容,但如何过滤它们?我建议使用此命令和sed或grep等工具 $ readelf --string-dump=.debug_str YOUR_PROGRAM 这将显示路径和源文件名: $ readelf --string-dump=.debug_str YOUR_PROGRAM | sed -n '/\/\|\.c/{s/.*\] //p}' 很好 但是,请确保您的_程序没有使用命令剥离 file YOU

我想通过ELF文件获取源代码路径和源代码名,.debug\u str部分包含我需要的内容,但如何过滤它们?

我建议使用此命令和sed或grep等工具

$ readelf --string-dump=.debug_str YOUR_PROGRAM
这将显示路径和源文件名:

$ readelf --string-dump=.debug_str YOUR_PROGRAM | sed -n '/\/\|\.c/{s/.*\]  //p}'
很好

但是,请确保您的_程序没有使用命令剥离

file YOUR_PROGRAM
还有另一种方法:

readelf --syms YOUR-PROGGRAM |tee /tmp/log

vim /tmp/log
:vim "FILE" %

您将获得所有文件名,但是没有路径。

readelf
持有密钥,但您不希望随意转储字符串。使用
-wi
选项正确格式化信息。
例如,创建一个shell脚本,如下所示:

readelf -wi $1 | grep -B1 DW_AT_comp_dir | \
    awk '/DW_AT_name/{name = $NF; getline; print $NF"/"name}'

这进一步总结了
readelf-wi

的输出,这个答案出现在低质量的审查队列中,可能是因为您没有提供任何代码解释。如果这个代码回答了这个问题,考虑添加一些解释你答案中的代码的文本。这样,你就更有可能获得更多的选票,并帮助提问者学习新的东西。
readelf -wi $1 | grep -B1 DW_AT_comp_dir | \
    awk '/DW_AT_name/{name = $NF; getline; print $NF"/"name}'