【问题标题】:how can i get the source code path && file names from an ELF file(compired with -g)?如何从 ELF 文件(与 -g 编译)中获取源代码路径和文件名?
【发布时间】:2015-09-28 18:20:27
【问题描述】:

我想通过 ELF 文件获取源代码路径 && 源名称,.debug_str 部分包含我需要的内容,但我该如何过滤掉它们呢?

【问题讨论】:

    标签: linux elf


    【解决方案1】:
    $ readelf --string-dump=.debug_str YOUR_PROGRAM
    

    工作正常。

    但是,请确保 your_program 未被使用命令剥离

    file YOUR_PROGRAM
    

    【讨论】:

    • 这个答案出现在低质量审查队列中,大概是因为您没有提供任何代码解释。如果此代码回答了问题,请考虑在答案中添加一些解释代码的文本。这样一来,您就更有可能获得更多支持,并帮助提问者学习新知识。
    【解决方案2】:

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

    $ readelf --string-dump=.debug_str YOUR_PROGRAM
    

    这个显示路径和源文件名:

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

    【讨论】:

      【解决方案3】:

      还有一种方法:

      readelf --syms YOUR-PROGGRAM |tee /tmp/log
      
      vim /tmp/log
      :vim "FILE" %
      

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

      【讨论】:

        【解决方案4】:

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

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

        进一步总结了readelf -wi的输出。

        【讨论】:

          猜你喜欢
          • 2023-03-16
          • 2013-06-06
          • 1970-01-01
          • 2023-03-26
          • 1970-01-01
          • 2018-05-30
          • 2014-03-14
          • 1970-01-01
          • 2014-12-21
          相关资源
          最近更新 更多