gpt4 book ai didi

c - 给定一个定义符号 foo 的完全链接的 a.out,我如何在不重新链接 a.out 的情况下判断该定义来自哪个目标文件?

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:35 24 4
gpt4 key购买 nike

我正在尝试解析一个 ELF 文件并创建一个在每个目标文件中定义的符号列表。除了符号和目标文件之间的链接,我能够找到我需要的一切。

我在 ELF 规范中找不到类似的内容。在我正在解析的这个特定文件中,我有一些可以使用的嵌入式 DWARF 调试信息,但理想情况下,我想找到符号和对象之间的标准链接,因为我想将其应用于许多非 GCC 编译器。

最佳答案

I'm trying to parse an ELF file and create a list of symbols defined in each object file.

您是在处理个人 ELF 对象文件,还是完全链接的可执行文件或共享库?由于使您的问题有意义的唯一方法是后者,因此我们假设您的实际问题是:

给定一个完全链接的 a.out,它定义了符号 foo,我如何在不重新链接 的情况下判断该定义来自哪个目标文件>a.out?.

一般来说,你不能。

首先,并非 a.out 中定义的每个符号甚至都可能来自目标文件:有些可能是通过链接描述文件或 --defsym 命令行定义的争论。

其次,weak 符号可以定义在多个目标文件中,链接器可以自由选择其中的任何一个。

最后,a.out中绝对没有目标文件->符号关联的记录。事实上,您甚至无法提取所链接的 .o 文件列表(无需重做链接并要求链接器打印它们)。

可能可以通过查看调试信息来重新建立这种关联,它会告诉您符号来自哪个翻译单元,然后猜测可能 foo.c 被编译成 foo.o,但这可能再次失败,因为 foo.c 可能已被编译成 bar.o baz.o(具有不同的 -DFOO 定义)。

关于c - 给定一个定义符号 foo 的完全链接的 a.out,我如何在不重新链接 a.out 的情况下判断该定义来自哪个目标文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57214102/

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