【发布时间】:2017-04-18 18:28:42
【问题描述】:
我有一个由程序生成的 .dat 文件。程序所有者不反对解析和编辑这个文件,但他不会给任何人答案。
该文件主要由以这种方式定义的变量组成:
在大多数情况下:
(4 bytes - length of the var name)(var name)(4 bytes of some internal var type)(4 bytes - possibly are elements count)(X bytes of var value)
很少:
(4 bytes - length of the var name)(var name)(1 zero byte)(4 bytes of some internal var type)
所以,例如:
([4 0 0 0][name])[11 0 0 0][1 0 0 0]([9 0 0 0][Alexander])
和
([8 0 0 0][names])[6 0 0 0](length [3 0 0 0])([4 0 0 0][John])([4 0 0 0][Anne])([7 0 0 0][SomeGuy])
我尝试查看 boost 二进制序列化,但它没有在文件中添加变量名,我认为使用 8 个字节,而不是 4 个。
【问题讨论】:
-
您需要有二进制数据文件的模板或布局才能弄清楚。您不知道每个单元有多少字节(例如
uint8_t或uint32_t)。此外,对于多字节数量,您需要知道数据是 Little Endian 还是 Big Endian 排序。 -
尝试在Reverse Engineering 网站上提问。
-
Thomas,它是 Macintosh ANSI (Notepad++)。我确定它是每单位 4 个字节。我发现数组的长度用 4 个字节表示。
标签: c++ serialization deserialization