如何从C中检查目标文件是否为COFF或ELF格式?

Chr*_*ris 5 c linux coff elf

我希望能够从我的C代码中检查目标文件的格式,以便我可以根据它是COFF还是ELF格式使用不同的函数来读取文件.

这是可能的,如果是的话,我该怎么做?

这在Linux顺便说一下,如果这有任何区别.

nne*_*neo 11

读取前四个字节.如果它们相等\x7fELF,则它是一个ELF文件.否则,您应该将其解析为COFF并查看它是否有意义.(注意COFF魔法要复杂得多;我得到的魔法条目不少于42个/usr/share/file/magic).

  • 我赞成,但我不同意`否则它是COFF`.如果不存在ELF魔法,它不是ELF文件,但是声明这意味着我认为COFF是否有点推测 - 例如,当输入文件根本不是对象时会发生什么. (5认同)

log*_*off 5

尝试命令文件。它告诉您文件的类型。

  • 虽然这是确定许多文件类型的有效方法,但它实际上并没有回答这个问题(它要求一种从 C... 执行此操作的方法...并且 `popen("file ...")` 将是一个相当糟糕的解决方案)。 (6认同)

m0s*_*it0 5

检查神奇数字。ELF幻数是 0x7f454C46 (0x7f + "ELF"),COFF 是 0x14c。无论如何都要注意这一点,因为 COFF 有不同的幻数。

读取这些值时请注意字节顺序。