import struct # 打开硬盘设备 disk = open(r'./openwrt-11.19.2023-x86-64-generic-squashfs-combined.img', 'rb') # 读取MBR mbr = disk.read(512) # 解析MBR中的分区表 def parse_mbr(mbr): # 分区表从第446字节开始,每个表项占16字节,共4个表项 part_table = mbr[446:510] # 扩展分区的类型代码为0x05或0x0F ext_types = [0x05, 0x0F] # 遍历分区表,找到扩展分区 for i in range(4): # 每个表项的结构为:1字节状态 + 3字节起始磁头/柱面/扇区 + 1字节类型 + 3字节结束磁头/柱面/扇区 + 4字节起始扇区LBA + 4字节扇区数 part_entry = part_table[i*16:(i+1)*16] # 获取分区类型 part_type = part_entry[4] # 如果是扩展分区,返回其起始扇区和扇区数 if part_type in ext_types: part_start = struct.unpack('