How do I check if an object file is in COFF or ELF format from within C?

13.5k views Asked by At

I would like to be able to check the format of an object file from within my C code so that I can use different functions for reading the file based on whether it is COFF or ELF format.

Is this possible, and if so, how would I do it?

This is in Linux btw if that makes any difference.

3

There are 3 answers

6
nneonneo On BEST ANSWER

Read the first four bytes. If they are equal to \x7fELF, it's an ELF file. Otherwise, you should parse it as COFF and see if it makes sense. (Note that COFF magic is a lot more complicated; I get no less than 42 magic entries in /usr/share/file/magic for it).

1
logoff On

Try the command file. It tells you the type of a file.

2
m0skit0 On

Check the magic number. The ELF magic number is 0x7f454C46 (0x7f + "ELF") and COFF's is 0x14c. Take care about this anyway because there are different magic numbers for COFF.

Watch out about endianness when reading these values.