【问题标题】:Header Apple Disk Image标头 Apple 磁盘映像
【发布时间】:2012-06-28 12:05:00
【问题描述】:

我尝试获取 dmg 文件的标题。我看到了这个a link 这对我有很大帮助。 所以我制作了一个 c++ 程序来获取所有这些东西。

在这里:

struct Header
{
int img;
char tag[4];
short size;
short   version;
int format;
int flag;
int num_block;
int offset;
int length;
int offset_comment;
int length_comment;
int offset_creator;
int length_creator;
char space[16];
};

void read_header(const char *path)
{
 Header head;

 FILE *file =  fopen(path, "rb");


 fread(&head, 1, sizeof(Header), file);

 printf(" size short = %d\n", sizeof( short ));
 printf(" size int = %d\n", sizeof( int ));
 printf(" size struct = %d\n", sizeof( Header ));

 printf("img %d\n", head.img);
 printf("tag %s\n", head.tag);  
 printf("size %d\n", head.size);
 printf("version %d\n", head.version);
 printf("format %d\n", head.format);
 printf("flag %d\n", head.flag);
 printf("num_block %d\n", head.num_block);
 printf("offset %d\n", head.offset);
 printf("length %d\n", head.length);
 printf("offset_comment %d\n", head.offset_comment);
 printf("length_comment %d\n", head.length_comment);
 printf("offset_creator %d\n", head.offset_creator);
 printf("length_creator %d\n", head.length_creator);

 }

我明白了:

size short = 2
size int = 4
size struct = 64
img 152133
tag 
size 0
version 0
format 0
flag 0
num_block 0
offset 0
length 0
offset_comment 0
length_comment 0
offset_creator 0
length_creator 0

我不知道为什么我的所有值都是 null 除了第一个。 我的 dmg 文件很好,我可以打开它。 有人知道我为什么得到空值吗?

【问题讨论】:

  • 尝试使用[[packed]] (C++11) 或__attribute__((packed)) (C++03, GCC/clang)。
  • 对不起,我可以把这些关键字放在哪里?
  • 我尝试像这样在结构的末尾添加它,struct Header {...}__attribute__((packed));但 id 什么也没做,总是一样的结果
  • __attribute__((packed)) struct Header {…

标签: c++ macos dmg


【解决方案1】:

首先,当您遇到此类错误时,最好实际查看原始形式的数据,以确定问题是出在您的代码上,还是出在它试图解释的数据上。

在这种情况下,您的问题是文件格式不同 - 当您使用磁盘实用程序创建 .dmg 文件时,它看起来与维基百科页面中指定的格式有点不同。

换句话说 - 你的代码很好,问题在于它正在处理的数据。

事实证明,.dmg 文件的“标题”实际上存储在文件末尾 - 可以使用 dmg2img - http://vu1tur.eu.org/tools/ 等工具来适当地解析数据;此外,它包含的标题定义比您正在使用的标题更好

【讨论】:

  • 为了更详细地说明这一点,您在 Wikipedia 中查看的文档适用于 Mac OS 9 上的磁盘复制使用的较旧的 .IMG 格式。.dmg 格式甚至看起来都不非常相似。
  • 所以我的 dmg 是用 "hdiutil convert -format UDRo" 生成的,所以没有压缩的 img 只读。但是我怎样才能解析这个标题呢?使用 c++ 结构 .?
  • 可以参考dmg2img的来源解析文件末尾的'header'
猜你喜欢
  • 1970-01-01
  • 2014-04-15
  • 2021-12-28
  • 2015-04-03
  • 1970-01-01
  • 2015-02-02
  • 1970-01-01
  • 1970-01-01
  • 2012-05-18
相关资源
最近更新 更多