如何从 object-file 转储源路径

How to dump path to source from object-file

假设我有一个用 gcc 编译的 C object-file app.o。如何将文件路径转储到编译 app.o 的原始 app.c。我的目标是使用 binutils 和 gcc 工具套件创建所有符号的列表 + 各自的源文件路径。 我绝不期待 all-in-one 解决方案。所以我尝试使用多种工具来收集我需要的信息。

用 text-editor 检查 object-file 表明(除了大量不可读的二进制乱码)文件 确实 包含对 app.c 作为嵌入到 object-file 格式中的字符串。但是我没有找到使用 objdumpnm.

提取该字符串的方法

我希望 objdump 有一些可以提取此源文件字符串的标志,但在尝试了 man 页面中记录的几乎所有选项后,我仍然找不到它。

有了源文件的路径,我希望我可以 运行 gcc -M <path-to-source>。这将允许我查看 app.c 包含的所有 headers 并找到 in-source 声明。

假设一个简单的 app.c 像这样:

void foo(void) {
}

通过gcc -c app.c -o app.o编译它。

运行 objdump -t app.o 转储符号 table,但未在任何地方引用原始 app.c。 运行 cat app.o 确实表明 object-file 包含 app.c 的文件路径(相对于 compile-time 处的密码)。但我并没有完全计划编写自己的 object-file 解析器来获取该字符串。

在发布问题几分钟后回答我自己的问题(呃!):

readelf -s app.o 打印符号 table,包括源文件的名称 (app.c)。这样我就可以 运行 gcc -M app.c 然后解析所有头文件以收集符号声明。