gpt4 book ai didi

c - 如何从目标文件转储源路径

转载 作者:行者123 更新时间:2023-11-30 16:20:17 26 4
gpt4 key购买 nike

假设我有一个 C 对象文件 app.o用gcc编译。如何将文件路径转储到原来的app.c从中app.o被编译。我的目标是使用 binutils 和 gcc 工具套件创建所有符号 + 各自源文件路径的列表。我绝不期待一种一体化的解决方案。因此,我尝试使用多种工具来收集我需要的信息。

使用文本编辑器检查目标文件表明(除了大量不可读的二进制乱码之外)该文件确实包含对 app.c 的引用作为嵌入到目标文件格式中的字符串。但是我没有找到使用 objdump 提取该字符串的方法或nm .

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

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

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

void foo(void) {
}

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

正在运行objdump -t app.o转储符号表,但不会在任何地方引用原始 app.c 。运行cat app.o确实显示对象文件包含 app.c 的文件路径(相对于编译时的 pwd)。但我并不打算仅仅为了获取该字符串而编写自己的对象文件解析器。

最佳答案

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

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

关于c - 如何从目标文件转储源路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55378492/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com