我正在尝试反序列化在 Delphi 中序列化的旧文件格式,它使用二进制序列化。除了其中的一些非常高级的记录外,我对文件的结构一无所知。
你会采取什么步骤来解决这个问题?有什么工具之类的吗?
我正在尝试反序列化在 Delphi 中序列化的旧文件格式,它使用二进制序列化。除了其中的一些非常高级的记录外,我对文件的结构一无所知。
你会采取什么步骤来解决这个问题?有什么工具之类的吗?
一个好的六角编辑器,并使用灰质来识别结构。
如果您提示它是哪种文件,您可以搜索更专业的工具。
运行 unix/Linux "file" 命令也可以很好 (*) 请参阅下面 Barry 的评论了解它的工作原理。它可以快速检查使用不同扩展名隐藏的常见文件类型,如 DBF、ZIP 等。
(*) 有适用于 Windows 的 3rd 方构建,但它们可能会滞后于版本。如果您可以在最近的 *nix 发行版上执行此操作,建议您这样做。
序列化过程简单地循环所有已发布的属性并将它们的值流式传输到文本文件。如果您不知道流式传输到文件的确切类,您将很难反序列化文件。(如果不是不可能的话)
首先是一个好的十六进制编辑器。如果在没有缓冲的情况下读取文件(例如,直接从 TFileStream 读取),您可以在使用 SysInternals 的 ProcMon 时获得一些信息;您可以准确地查看在哪些块中读取了哪些数据,从而更快地确定您已经识别的结构之间的边界在哪里。