One format that you normally would not encounter very often unless working with certain microcontrollers is the Intel HEX format. This format is a text format to transfer binary information in a text representation. The Wikipedia article about the format is very informative and lists almost everything that needs to be known about the format (but not everyting, as I will show later).
Most scanners would say that these files are text files, but they are actually binary files in disguise! This is why I try to recognize them and process them.
Unless you are working a lot with microcontrollers then the most likely place where you will find these files is in the Linux kernel, where many firmware files (for chips) are included in Intel HEX format.
Creating an unpacker for this file format is quite easy, but you could also use the the SRecord package, which also is able to extract/convert files in different, but similar file formats, such as SREC and others.
For example to convert the "ls" binary from a regular raw file to Intel HEX you would use the srec_cat utility from SRecord:
which takes the ls binary and spits out the file "output-file" which is an ASCII file:
Converting back is easy as well:
which will spit it out in binary format:
and which is identical to the original file:
In the Linux kernel there are many Intel HEX files that cannot be unpacked by srec_cat for one simple reason: srec_cat assumes that the whole file is Intel HEX code and there are no lines with for example comments. The solution is simple: write your own parser and don't read past the "End Of File" line.
Most scanners would say that these files are text files, but they are actually binary files in disguise! This is why I try to recognize them and process them.
Unless you are working a lot with microcontrollers then the most likely place where you will find these files is in the Linux kernel, where many firmware files (for chips) are included in Intel HEX format.
Creating an unpacker for this file format is quite easy, but you could also use the the SRecord package, which also is able to extract/convert files in different, but similar file formats, such as SREC and others.
For example to convert the "ls" binary from a regular raw file to Intel HEX you would use the srec_cat utility from SRecord:
$ srec_cat ls -binary -Output output-file -intel
which takes the ls binary and spits out the file "output-file" which is an ASCII file:
$ file output-file output-file: ASCII text
Converting back is easy as well:
$ srec_cat output-file -intel -Output ls.new -raw
which will spit it out in binary format:
$ file ls.new ls.new: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=8f8149dbcfdd68a9e7d0e8d29115d05c390522d0, stripped
and which is identical to the original file:
$ md5sum ls ls.new 82646b653d15523d9d54789132e23434 ls 82646b653d15523d9d54789132e23434 ls.new
In the Linux kernel there are many Intel HEX files that cannot be unpacked by srec_cat for one simple reason: srec_cat assumes that the whole file is Intel HEX code and there are no lines with for example comments. The solution is simple: write your own parser and don't read past the "End Of File" line.
Reacties
Een reactie posten