【发布时间】:2011-04-25 00:33:46
【问题描述】:
有没有什么书或教程可以教我如何阅读具有复杂结构的二进制文件。我做了很多尝试来制作一个必须读取复杂文件格式并将其保存在结构中的程序。但它总是因为堆溢出等导致程序崩溃而失败。
【问题讨论】:
标签: c file-structure
有没有什么书或教程可以教我如何阅读具有复杂结构的二进制文件。我做了很多尝试来制作一个必须读取复杂文件格式并将其保存在结构中的程序。但它总是因为堆溢出等导致程序崩溃而失败。
【问题讨论】:
标签: c file-structure
您最好的选择可能是查找有关二进制网络协议而不是文件格式的信息。主要问题(字节顺序、结构打包、序列化和反序列化指针,......)是相同的,但网络人往往更清楚这些问题,并且更明确地处理它们。从线路读取和写入二进制 blob 与处理磁盘上的二进制 blob 并没有太大区别。
您还可以在开源图形包(例如netpbm 或The Gimp)中找到很多现有示例。一个开源的办公包(例如LibreOffice)也会为您提供大量处理复杂和令人费解的二进制格式的示例代码。
Google's Protocol Buffers 或老式的 ONC RPC 和 XDR 甚至可能对您有用。
我不知道任何有关此类事情的书籍或手册,但也许一堆现实生活中的工作示例对您来说比 HOWTO 指南更有用。
【讨论】:
fread 直接放入结构中,手动逐字节解压缩”,示例将向您展示如何正确执行此操作。
调试内存访问问题的最佳工具之一是 valgrind。下次我会试试的。至于书籍,您需要更具体地了解要解析的格式。格式有很多种,其中许多格式彼此完全不同。
【讨论】:
查看Flavor。它允许您使用类似 C 的结构指定格式,并将自动生成 C++ 或 Java 中数据的解析器。
【讨论】: