如何从 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 格式中的字符串。但是我没有找到使用 objdump
或 nm
.
提取该字符串的方法
我希望 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
然后解析所有头文件以收集符号声明。
假设我有一个用 gcc 编译的 C object-file app.o
。如何将文件路径转储到编译 app.o
的原始 app.c
。我的目标是使用 binutils 和 gcc 工具套件创建所有符号的列表 + 各自的源文件路径。
我绝不期待 all-in-one 解决方案。所以我尝试使用多种工具来收集我需要的信息。
用 text-editor 检查 object-file 表明(除了大量不可读的二进制乱码)文件 确实 包含对 app.c
作为嵌入到 object-file 格式中的字符串。但是我没有找到使用 objdump
或 nm
.
我希望 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
然后解析所有头文件以收集符号声明。