无忧启动论坛

标题: GPT分区表头中的CRC32如何计算?有没有高手玩过这里? [打印本页]

作者: 红毛樱木    时间: 2019-7-9 18:56
标题: GPT分区表头中的CRC32如何计算?有没有高手玩过这里?
表格 1 GPT主分区头数据格式

字节偏移
长度
内容
0
8字节
签名("EFI PART", 45 46 49 20 50 41 52 54)
8
4字节
修订版本号(在1.0版中,值是 00 00 01 00)
12
4字节
分区头的大小(单位是字节,通常是92字节,即 5C 00 00 00)
16
4字节
分区头(第0-91字节)的CRC32校验,计算前需先将此内容写0
20
4字节
保留,必须是 0
24
8字节
当前LBA(这个分区表头的位置)
32
8字节
备份LBA(另一个分区表头的位置)
40
8字节
第一个可用于分区的LBA(主分区表的最后一个LBA + 1)
48
8字节
最后一个可用于分区的LBA(备份分区表的第一个LBA − 1)
56
16字节
硬盘GUID(在类UNIX系统中也叫UUID)
72
8字节
分区表项的起始LBA(在主分区表中是2)
80
4字节
分区表项的数量
84
4字节
一个分区表项的大小(通常是128)
88
4字节
CRC32 of partition array
92
*
保留,剩余的字节必须是0(对于512B/LBA的硬盘就是420个字节)

请教上面的“分区头(第0-91字节)的CRC32校验,计算前需先将此内容写0”,这里的CRC32是怎么计算的?拿16进制字符串计算,还是拿什么计算?有没有高手研究过的?
相关资料在这里:http://www.360doc.com/content/18/0526/10/51888465_757122283.shtml



作者: chishingchan    时间: 2019-7-9 22:25
骨灰级问题!帮顶!
作者: 红毛樱木    时间: 2019-7-9 23:54
frg521 发表于 2019-7-9 22:36
...

用winhex我就不问了。。。。。
已搞定。
本来用PECMD2012直接算PE变量的,结果不对。换了中方式 读文件就对了。
作者: pcfan120    时间: 2019-7-10 00:13
小白表示没看懂,帮顶
作者: jkj    时间: 2019-7-10 09:01
就是对GPT头计算crc32, 计算crc32的代码网上可找到. 计算GPT头crc32时, 不包括GPT头里的crc32这个域自身, 所以计算时把GPT头的crc32域设置为0, 这样便于直接使用整个GPT头计算.

计算crc32时,是对GPT头按照字节计算. 用C语言表示的话, 类似这样的格式 uCRC32Value = crc32(pGptHead, sizeof(GPT_HEAD));




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3