【发布时间】:2012-10-01 02:45:15
【问题描述】:
我希望能够从我的 C 代码中检查目标文件的格式,以便我可以根据文件是 COFF 还是 ELF 格式使用不同的函数来读取文件。
这可能吗?如果可以,我该怎么做?
顺便说一句,这是在 Linux 中,如果这有什么不同的话。
【问题讨论】:
-
试试 libmagic。这是一个使用'magic'库的接口,'file'命令也使用它。
我希望能够从我的 C 代码中检查目标文件的格式,以便我可以根据文件是 COFF 还是 ELF 格式使用不同的函数来读取文件。
这可能吗?如果可以,我该怎么做?
顺便说一句,这是在 Linux 中,如果这有什么不同的话。
【问题讨论】:
读取前四个字节。如果它们等于\x7fELF,则它是一个 ELF 文件。否则,您应该将其解析为 COFF 并查看它是否有意义。 (请注意,COFF 魔法要复杂得多;我在 /usr/share/file/magic 中得到不少于 42 个魔法条目)。
【讨论】:
Otherwise it's COFF。如果不存在 ELF 魔法,则它不是 ELF 文件,但说明这意味着 if 的 COFF 我认为有点假设 - 例如,当输入文件根本不是对象时会发生什么。
检查幻数。 ELF magic number is 0x7f454C46 (0x7f + "ELF") 和 COFF's is 0x14c。无论如何都要注意这一点,因为 COFF 有不同的幻数。
阅读这些值时要注意字节顺序。
【讨论】:
尝试命令file。它告诉你文件的类型。
【讨论】:
popen("file ...")非常糟糕的解决方案)。