detect endianness of a binary with python

MRAB python at mrabarnett.plus.com
Wed Jul 21 15:54:34 EDT 2010


Thomas Jollans wrote:
> On 07/21/2010 05:29 PM, Holger brunck wrote:
>>>> Something like the "file" utility for linux would be very helpfull.
>>>>
>>>> Any help is appreciated.
>>> You're going to have to describe in detail what's in the file before
>>> anybody can help.
>> We are creating inside our buildsystem for an embedded system  a cram filesystem
>> image. Later on inside our build process we have to check the endianness,
>> because it could be Little Endian or big endian (arm or ppc).
>>
>> The output of the "file" tool is for a little endian cramfs image:
>> <ourImage>: Linux Compressed ROM File System data, little endian size 1875968
>> version #2 sorted_dirs CRC 0x8721dfc0, edition 0, 462 blocks, 10 files
>>
>> It would be possible to execute
>> ret = os.system("file <ourImage> | grep "little endian")
>> and evaluate the return code.
>> But I don't like to evaluate a piped system command. If there is an way without
>> using the os.system command this would be great.
> 
> Files don't, as such, have a detectable endianess. 0x23 0x41 could mean
> either 0x4123 or 0x2341 - there's no way of knowing.
> 
> The "file" utility also doensn't really know about endianess (well,
> maybe it does swap bytes here and there, but that's an implementation
> detail) - it just knows about file types. It knows what a little-endian
> cramfs image looks like, and what a big-endian cramfs image looks like.
> And as they're different, it can tell them apart.
> 
> If you're only interested in a couple of file types, it shouldn't be too
> difficult to read the first few bytes/words with the struct module and
> apply your own heuristics. Open the files in question in a hex editor
> and try to figure out how to tell them apart!

If you have control over the file format then you could ensure that
there's a double-byte value such as 0xFF00 at a certain offset. That
will tell you the endianness of the file.



More information about the Python-list mailing list