二进制序列化文件 - Delphi
我正在尝试反序列化在 Delphi 中序列化的旧文件格式,它使用二进制序列化。除了其中的一些非常高级的记录之外,我对文件的结构一无所知。
您将采取什么步骤来解决这个问题?有什么工具之类的吗?
I am trying to deserialize an old file format that was serialized in Delphi, it uses binary seralization. I know nothing about the structure of the file except some very high level records that are in it.
What steps would you take to solve this problem? Any tools etc?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
一个优秀的十六进制编辑器,并使用灰质来识别结构。
如果您得到提示它是什么类型的文件,您可以搜索更专业的工具。
运行 unix/Linux“文件”命令也不错 (*) 请参阅下面 Barry 的评论了解其工作原理。它可以快速检查使用不同扩展名隐藏的常见文件类型,如 DBF、ZIP 等。
(*) 有适用于 Windows 的第 3 方版本,但它们可能在版本上滞后。如果您可以在最新的 *nix 发行版上执行此操作,建议您这样做。
A good hexeditor, and use the gray matter to identify structures.
If you get a hint what kind of file it is, you can search for more specialized tools.
Running the unix/Linux "file" command can be good too (*) See Barry's comment below for how it works. It can be a quick check for common filetypes like DBF,ZIP etc hidden by using a different extension.
(*) there are 3rd party builds for windows, but they might lag in versions. If you can do it on a recent *nix distro, it is advised to do so.
序列化过程只是循环所有已发布的属性并将它们的值流式传输到文本文件。如果您不知道流式传输到文件的确切类,您将很难反序列化该文件。 (如果不是不可能的话)
The serialization process simply loops over all published properties and streams their value to a text file. If you do not know the exact classes that were streamed to the file you will have a very hard time deserializing the file. (if not impossible)
首先要有一个好的十六进制编辑器。如果在没有缓冲的情况下读取文件(例如直接从 TFileStream 读取),您可以在使用 SysInternals 的 ProcMon 时获得一些信息;您可以准确地看到在哪些块中读取了哪些数据,从而更快地确定您已识别的结构之间的边界在哪里。
A good hex editor is first. If the file is read without buffering (eg read directly from a TFileStream) you could gain some information when using ProcMon from SysInternals; You can see exactly what data is read in what chunks and thus determine more quickly where the boundaries are between the structures you already identified.