当使用嵌入式系统时,通常最容易使用可下载的固件文件而不是从设备中恢复固件。

大多数这些ROM映像都是.bin文件的形式。有时,它们是Motorola SREC文件(通常称为.s19文件或.mot文件)。

可以使用许多可用的工具将它们轻松转换为bin文件。 SREC文件往往只包含实际存在数据/代码且转换过程中用填充值填充空白的记录。填充通常为0x00或0xFF。汇编程序,或者只是填充。有时这可以使识别数据结构更容易。

SREC文件还会泄漏其他内容吗?

#1 楼

如果我错了,请纠正我,但是由于SREC是二进制数据的ASCII表示形式,因此相应的二进制文件也不会“泄漏”用0x00 / 0xFF填充的数据部分吗?

话虽这么说,是的,我认为在某些情况下,假设供应商正确使用了SREC的记录类型,那么SREC可能会公开关于固件的有用信息,否则您将无法通过二进制映像获得这些信息。 SREC文件中的每一行文本均以记录代码(S0,S1,S2等)开头。 Wikipedia的SREC页面上的一些示例记录类型:


S0记录数据序列包含特定于供应商的数据,而不是程序数据。带有文件名和可能的版本信息的字符串。

数据顺序,取决于所需地址的大小。 16位/ 64K
系统使用S1,24位地址使用S2,完整32位地址使用S3。

S7,S8或S9记录的地址字段可能包含程序的起始地址。



显然,SREC文件提供有关每个记录中数据的信息-通常不会包含在二进制文件中的信息。例如,如果看到S7 / 8/9记录,则可能假设固件的入口点位于此处。同样,使用S2 vs S3可以告诉您数据是包含24位地址还是32位地址。

我不能说,实际上在实践中使用这些不同的SREC记录类型是多么普遍。供应商可能只是用相同的记录类型(例如S1)标记所有内容,与二进制文件相比,它实际上不会为您提供有关数据的更多信息。

评论


谢谢。 SREC文件似乎通常仅包含最低要求-因此,如果有一排FFFFFFFF,则编译器中已将其放入其中。尽管通常没有太多事情要做。

– Cyber​​gibbons
13年5月19日在21:11

#2 楼

通常,您只获得地址和原始字节,但是某些工具/编译器可能会使用自定义记录类型或添加其他信息。例如,Tricore的Tasking VX工具链使用S0记录进行标识:


S0记录

'S' '0' <length_byte> <2 bytes 0> <comment> <checksum_byte>


生成的链接器S记录文件以具有以下内容的S0记录开头:

length_byte:0x6
注释:ltc(TriCore链接器)
校验和:0xB6

        l t c
S00600006C7463B6


S0记录是注释记录,不包含有关程序执行的相关信息。