无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 2771|回复: 4
打印 上一主题 下一主题

[求助] GPT分区表头中的CRC32如何计算?有没有高手玩过这里?

[复制链接]
跳转到指定楼层
1#
发表于 2019-7-9 18:56:42 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
表格 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进制字符串计算,还是拿什么计算?有没有高手研究过的?


2#
发表于 2019-7-9 22:25:49 | 只看该作者
骨灰级问题!帮顶!
回复

使用道具 举报

3#
 楼主| 发表于 2019-7-9 23:54:43 | 只看该作者

用winhex我就不问了。。。。。
已搞定。
本来用PECMD2012直接算PE变量的,结果不对。换了中方式 读文件就对了。
回复

使用道具 举报

4#
发表于 2019-7-10 00:13:04 | 只看该作者
小白表示没看懂,帮顶
回复

使用道具 举报

5#
发表于 2019-7-10 09:01:11 | 只看该作者
就是对GPT头计算crc32, 计算crc32的代码网上可找到. 计算GPT头crc32时, 不包括GPT头里的crc32这个域自身, 所以计算时把GPT头的crc32域设置为0, 这样便于直接使用整个GPT头计算.

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-4-27 09:36

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表